「zsh最強シェル入門」の内容を試してみた

zsh最強シェル入門

zsh最強シェル入門


zsh最強シェル入門」を買いました。便利そうなことが書いてあったので、さっそく内容を試してみました。

ちなみに、僕が今まで知ってたことも結構書いてあったけど、そういうのはパス。基本を抑えたい人は漢のzshの連載なんかを見るといいよ。

!を使ったヒストリ操作

!$を使うと、その部分が直前のコマンドの最後の引数になります。

例えば、

% cp hoge.sh hoge-temp.sh  # テスト用のファイルをコピーして、
% vi !$  # これで編集できる

% vi !$  # ここでタブを押すと、
% vi hoge-temp.sh  # ほんとのファイル名に展開される

# ヒストリの登録はちゃんとした名前になってる
% history
 ...
150 vi hoge-temp.sh

zshすげー! あと、$*を使うと前のコマンドの引数全部になります。

キーバインドのカスタマイズ

コマンドライン編集のことも載っていました。さすがzsh、やりすぎなくらい高機能です。でも微妙にキーが押しにくいコマンドがあります。せっかくの機能がもったいない。ということで、そういうのを押しやすいキーに変更しました。ちなみに、これはemacsモードの例です。

bindkey "^[u" undo
bindkey "^[r" redo
bindkey "^\\" history-beginning-search-backward
bindkey -s '^O' '^E !$^I'

初めの2行はundo/redoです。もともとundoは"^X^U""^_"になっていたけど、どっちも押しにくいので変更しました。redoの方はデフォルトでキー割り当てがありません。せっかくなので登録しておきました。

3行目はこんな風に使います。

% ls /  # ここで^\を押すと、
% ls /home/  # ls / で始まる履歴が表示される
% ls /usr/bin  # ^\を押すと、さらに次が表示される

これもデフォルトでは割り当てられていないので、追加しておきました。

4行目は、さっき説明した!$でのヒストリ展開です。^Oで「行末に移動して!$を追加し、さらにそれをタブで展開」というのを一気に行います。こんな風に-sで好きな文字列に割り当てられるので、!$なんてめんどくさくて押してられない、という人(僕のこと)も安心です。

2008/12/16 追記

こんなことしなくても、もともとの機能であったよ。

bindkey '^O' insert-last-word

こっちを使うことにした。

2008/12/11 追記

キーバインドを微妙に変更した。特に、history-beginning-search-backward を^Pに設定していたが、コマンド入力無しの状態で^Pを入力すると一つ前の履歴を表示した後カーソルキーが行頭に来てしまっていた。これがいやだったので^Pとは違うキーに変更した。

その他

setopt hist_reduce_blanks

ヒストリに記録するときに、余分なスペースが削除されます。これはsetopt hist_ignore_all_dupsなんかといっしょに設定すると良いです。

例えばこんな風に入力しても同じコマンドということになって、余計なヒストリが残らなくなります。

ls -l /
ls    -l    /

こんな感じでzshのカスタマイズをしまくりたいので、もっと本が出てほしい。