Posted at

zsh から bash 用の補完スクリプトをつかって nvm の補完候補を出す

More than 3 years have passed since last update.


要約

nvm には bash 用の補完スクリプトしか用意されていないが zsh に 「bash 用の補完スクリプトを解釈するステキ機能」 が備わっているため、それを利用して zsh で nvm の補完候補を出すことができる。

.zshrc


.zshrc

[[ -r $NVM_DIR/bash_completion ]] && . $NVM_DIR/bash_completion


と書いておけば zsh でも nvm の補完候補が出るようになる。


詳細

zsh から Node の version manager である nvm を使うときに補完候補を出せないかなと思って調べていたら bash 用の補完スクリプト が用意されていることがわかった。

zsh 用に移植しようかと思ってソースコードを読んでいると


bash_completion

# complete is a bash builtin, but recent versions of ZSH come with a function

# called bashcompinit that will create a complete in ZSH. If the user is in
# ZSH, load and run bashcompinit before calling the complete function.
if [[ -n ${ZSH_VERSION-} ]]; then
autoload -U +X bashcompinit && bashcompinit
fi

という記述を発見。なんでも最近(数年前から)の zsh には bash 用の補完スクリプトを解釈する機能が備わっているらしい。

その機能を有効にするためには autoload -U +X bashcompinit && bashcompinit とすればよいらしく nvm の bash 用補完スクリプト bash_completion は、上で抜粋した部分で勝手にコレを呼んでくれている。

というわけで我々は bash と同じく .zshrc


.zshrc

[[ -r $NVM_DIR/bash_completion ]] && . $NVM_DIR/bash_completion


とすればよい。素晴らしい。

nvm alias default と打って TAB を打ち込んだ時にバージョン一覧が表示されなかったりと、かゆいところに手が届かない感じもあるけれど、ないよりははるかにマシ。