zsh
UNIX系のOSを使う者にとって、シェルは非常に重要である。自分の手先のように動き、痒いところに手の届くシェルを、やはり使いたいと思うものである。実際にどのシェルを使うかは人それぞれだが、最近zshを使い始めたところとても感触が良いので、zshについて書く。
■ 実際によく使っている機能
zshは極めて多機能だが、私が現在の所よく使っている機能について書く。なお、他の機能は役に立たないという事ではなく、あくまで私が使いこなせていないだけである。念のため。
右プロンプト
RPROMPT変数により、コマンド入力行の右端にもプロンプトを出すことができる。このプロンプトは、入力中のコマンドが長くなって、プロンプトに到達すると、さっと消える。私は、ここにカレントディレクトリのフルパスを表示している。フルパスは常にどこかに表示されていると便利だが、普通のプロンプトに表示したのでは入力スペースが減ってしまうので、まさに右プロンプトがぴったりの位置なのである。
具体的には例えば次のようにする;
% RPROMPT="%{^[[32m%}[%n@%m:%d]%{^[[m%}"
なお、zshのプロンプトはデフォルトでは%である。意味はbash等での$と同じ。
上の例では、この右プロンプトが緑で表示されるようにしてある (%{^[[32m%}と%{^[[m%}がその記述。32の部分を33、34等と変える事で、他の色にもできる)。なお、^[はESCコードで、シェルやvi上なら[Ctrl+v][ESC]、Emacs上なら [Ctrl+q][ESC]というキー操作で入力できる特殊文字である。普通にカレット+ブラケットを入力しても効果は得られない。
なお、色を表示する場合はあらかじめ
setopt PROMPT_SUBST
を実行しておく必要がある。
色分けは単なる飾りではなくて、これはプロンプトなんだよぉ、という事が一発で分かる、という働きがある。特にフルパスなんかを表示すると、画面上がごちゃごちゃになってわけわからなくなってくるので、けっこう大切な事だったりする。
真ん中の[%n@%m:%d]については、%nがユーザ、%mがホストネーム、%dがカレントディレクトリのフルパスを、それぞれ表示する事を指定している。
ちなみに、左プロンプトの方はというと、次のような設定がしてある;
PROMPT="(zsh)[%n@%m]%{[34m%}%(#.#.%%)%{[m%} "
%(#.#.%%)というのは、実はよく分からないのだが(^^;)、少なくとも一般ユーザでログインしたときには%が表示される。これは、デフォルトの設定を引き継いだだけなので何とも言いようがない。ここにもESCシーケンスが使われていて、 %だけ青で表示される。
なお、先頭の(zsh)は、リモートからログインした時に分かるようにつけた目印だが、「zsh使ってるぜい!」とアピールする働きもある(^^;)。
拡張エイリアス
人から伝え聞いたものだが、次のようなエイリアス設定が可能である。
alias -g G='| grep ' alias -g L='| less'
こうしておくと、「grepかけてlessで見たいな〜」とか思ったときに
% cat hoge.txt G 'moge.*h[og]e' L
なんてことが、できる。
訂正機能
setopt CORRECT_ALL
を実行すると、以後訂正機能が使えるようになる。訂正というのは、具体的にはこんな機能である。
% clera zsh: correct 'clera' to 'clear' [nyae]?
このように文字が逆になってしまう打ち間違いの他に、間違って隣のキーを押してしまったという間違いも訂正してくれる。このとき、
% clesr
は訂正が入るが、
% clemr
は入らない。あくまで、隣のキーを押し間違えた場合のみなのである。
Auto cd
setopt AUTO_CD
を実行すると、以後
% hoge/moge/fugo/
と打っただけで「cd hoge/moge/fugo/」が実行される。
コマンドラインスタック
途中までコマンドを入力しかけたところで、別のコマンドを前もって実行しておかなければならなかった事に気がつくことは、よくある。そんなときに一度入力したコマンドを消して、別のコマンドを打って、実行して、また元のコマンドを入力しなおす、のはとても面倒である。
zshなら、この状況では次のようにすれば良い;ESC+qを押す。すると入力しかけていたコマンドが消えるので、別のコマンドを入力して実行する。そして実行が終ると、表示された次のプロンプトにはすでに入力しかけて途中でやめていた前のコマンドが表示されている。あとは続きを入力して、実行するだけだ。
選択的補完
例えば、
% ls hoge.html hoge.tex hoge.txt hoge.mp3 % w3m [Tab]
といった感じでタブキーを押すと、hoge.htmlが補完される。
% platex [Tab]
なら、hoge.texが補完される。つまり、コマンドの種類を判別して、補完する内容を選別してくれるのである。
