zsh の自動インクリメンタル補完が素晴らしい件。
これはまさに Life Changing だ。 zsh で自動的にインクリメンタル補完をしてくれる。いままで Tab キーを入力して手動で補完していたのだがそれを自動でやってくれる。
Incremental completion on zsh
http://mimosa-pudica.net/zsh-incremental.html
以下のブログで紹介されている。
http://d.hatena.ne.jp/seiunsky/20110519/1305764493
導入
ダウンロード
curl -O -L http://mimosa-pudica.net/src/incr-0.2.zsh test -d ~/.zsh/plugin || mkdir -p ~/.zsh/plugin mv incr-0.2.zsh ~/.zsh/plugin
.zshrc で読み込む
load_plugins() { if [ -d ~/.zsh/plugin ]; then source ~/.zsh/plugin/* fi } main() { load_plugins }
課題
試したところ個人的に 2 点気になるところがあった。
エスケープシーケンスがうまく効かない。
環境によってはエスケープシーケンスが効かないようなので、以下のようにパッチを当てた。
85d84 < echo -n "\e[32m" 91,95d89 < function preexec < { < echo -n "\e[39m" < } <
ssh 構文の補完で相手先ホストに大量の接続要求をしてしまう。
たとえば以下のようなコマンドを打つ場合。
rsync -avz hoge user@host:~/Documents/
相手先のホストで一定時間内の ssh の接続回数を制限していた場合などに、コマンドを途中まで打つだけで BAN されてしまう。
これについては回避方法がいまのところ思いつかないので良い案が欲しいところ。
5/22 22:47 追記
以下のように特定のコマンドを自動補完対象外にすることで解決した。
@@ -20,6 +20,7 @@ bindkey -M emacs '^i' expand-or-complete-prefix-incr unsetopt automenu compdef -d scp +compdef -d rsync compdef -d tar compdef -d make compdef -d java