zshの補完機能
zshの補完機能
現在自分が、開発環境で利用しているシェルはzshです。1ヶ月程度前にbashから乗り換えました。乗り換えた理由は補完機能が便利すぎるから!それだけです。zshを使ったことがない方はぜひ試して見てください。
なので~/.zshrcはほとんどカスタマイズしていません。補完機能を有効にする記述をしてあるだけです。以下に開発環境の設定を晒します。
~/.zshrc
autoload -U compinit
compinit
#allow tab completion in the middle of a word
setopt COMPLETE_IN_WORD
#japanese setting (ktanaka)
LANG="ja_JP.eucJP"
export LANG
さて首尾よく設定ファイルを書いたら、zshコマンドを実行するだけです。zshの補完機能はどれほど強力なものでしょうか?
コマンド名補完
bashにもついている機能です。debianで"set-l"と入力しTABキーを押すとset-language-envまで補完されます。zshで異なるのは、プロンプトが更新されず、補完の用が済めば、リストは消えてくれることです。たとえば、"z <TAB>"とタイプすると、(bashはTABが2回)
[bash]
colinux:~$ z
zcat zdiff zegrep zforce zless znew zsh4
zcmp zdump zfgrep zgrep zmore zsh zsoelim
ktanaka@colinux:~$ ■
[zsh]
colinux% z■
zcat zdump zformat zmodload zregexparse zstyle
zcmp zegrep zgrep zmore zsh
…(略)
と表示されます。補完が実行された後のカーソルの位置に注目してください。
コマンドのオプション補完
[zsh]
コマンドを入力して"-<TAB>"と入力すると、
colinux% svn commit -■
--config-dir --force-log --non-recursive --username
--editor-cmd --message --password -F
…(略)
colinux% sudo -■
-H -- set HOME environment variable
-K -- remove user timestamp
-L -- list options from Default section
…(略)
こんな感じです。
その他コマンドに応じたさまざまな補完
[apt-getにおけるパッケージ名補完]
colinux% apt-get install samba■
samba samba-common samba-doc samba-tng-common
samba-client samba-dbg samba-doc-ja
[sudo -uやchownにおけるユーザ名、グループ補完]
colinux% sudo -u ■
Debian-exim games lp nobody root
…(略)
[killにおけるプロセスID補完]
colinux% kill ■
567 ttyp1 00:00:01 zsh
688 ttyp1 00:00:00 zsh
689 ttyp1 00:00:00 ps
といった感じで実にさまざまなものを補完してくれます。
こういった機能を試してみて、zshに乗り換えたいと思ったときは"chsh -s /bin/zsh"(Debian GNU/Linux 4.0r0)とすれば次回からシェルを変更することができます。