読者です 読者をやめる 読者になる 読者になる

僕のYak Shavingは終わらない

車輪の再発明をやめたらそこには壮大なYakの群れが

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と入力
f:id:kazuph1986:20130403230313p:plain
普通に候補がでます。


gと打ってTABを押すと
f:id:kazuph1986:20130403230529p:plain

f:id:kazuph1986:20130403230542p:plain
globalと補完してくれました。


そしてまたTABを押すと・・・
f:id:kazuph1986:20130403230613p:plain

現在インストールされているPerlリストがでます!


そして今度はmigrate_modulesと打って(補完して)からTABを押すと
f:id:kazuph1986:20130403230849p:plain
Versionの補完ができました!


そして一度決定したあとさらに続けてTABを押すだけで・・・
f:id:kazuph1986:20130403230925p:plain
また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補完書いた - ニッキ