zshで超々簡単に多段の補完を行う一番楽な実装 ~plenvを例にやってみた~
※追記(2013/06/02)
最新版のplenvだとrbenvみたいに自前で補完ができるようになってます。
なので以下の記事でplenvの補完つくってももう意味は無いです。
補完のつくりかたの一例として御覧ください。
超初級zsh補完職人のkazuphです。
今回はplenvの補完をつくりました。今日時間があるので2段階補完できるようにしますね。2段階目に現在インストールされているPerlのバージョンを選択できるようにしました。次はglobalやlocalなどのVersionが欲しい時にだけ補完を出すようにします(21:23)。いやいやこれは意外に簡単に良い感じになったのではないでしょうか。一旦これで終了です。もっとこうした方がいいとか、バグってるとかあったら教えて下さい(22:43)。
コマンドリスト
ちなみにコマンド一覧は以下のようにして取得しました。
$ wget https://raw.github.com/tokuhirom/plenv/master/bin/plenv $ cat plenv | grep 'sub CMD' | sed -e 's/sub CMD_//' | sed -e 's/ {.*$//' init rehash exec which version help global local install list versions list_modules install_cpanm available migrate_modules
使ってみる
まずはplenvと入力
普通に候補がでます。
gと打ってTABを押すと
globalと補完してくれました。
そしてまたTABを押すと・・・
現在インストールされているPerlリストがでます!
そして今度はmigrate_modulesと打って(補完して)からTABを押すと
Versionの補完ができました!
そして一度決定したあとさらに続けてTABを押すだけで・・・
またVersionを補完してくれました!!
ちなみにVersionを出さなくてもいいコマンドについては当然候補を出しません。
まとめ
zshの補完は超便利で簡単に書けていいですね!!
$wordsとか罠過ぎてどうして見つけられたのかアレですがホント偶然見つけました(ググってこれ使ってる記事にはまったく遭遇しなかった)。
この方法なら誰でもすぐ多段の補完が書けると思いますのでみなさんも挑戦してみてください!
ではでは〜
参考
githubのhubコマンドを補完するzsh補完関数を作ってみた - Glide Note - グライドノート
zsh補完関数を自作すると便利 - HAKOBE blog ♨
zshÊä´°´Ø¿ô¤Î½ñ¤Êý(Ìõ)
文字列の一致とif文におけるOR - 睡眠不足?!
zshcompwid(1): zsh completion widgets - Linux man page
zshcompsys(1): zsh completion system - Linux man page
↑ちなみに$wordsはここで見つけました。グライドノートさんの何処かのzsh補完の記事にリンクがあって辿ってそこ読んで偶然あの行で止まってなかったらもっと時間かかったろうなぁ。マジ感謝です。
追記(2013/04/04 10:54)
plenvのzsh補完を書いている方がいました。
こっちの方がzshっぽい(^q^)
読んで勉強して見たいと思います。
plenvのzsh補完書いた - ニッキ