要約
nvm には bash 用の補完スクリプトしか用意されていないが zsh に 「bash 用の補完スクリプトを解釈するステキ機能」 が備わっているため、それを利用して zsh で nvm の補完候補を出すことができる。
.zshrc
に
[[ -r $NVM_DIR/bash_completion ]] && . $NVM_DIR/bash_completion
と書いておけば zsh でも nvm の補完候補が出るようになる。
詳細
zsh から Node の version manager である nvm を使うときに補完候補を出せないかなと思って調べていたら bash 用の補完スクリプト が用意されていることがわかった。
zsh 用に移植しようかと思ってソースコードを読んでいると
# 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
で
[[ -r $NVM_DIR/bash_completion ]] && . $NVM_DIR/bash_completion
とすればよい。素晴らしい。
nvm alias default
と打って TAB を打ち込んだ時にバージョン一覧が表示されなかったりと、かゆいところに手が届かない感じもあるけれど、ないよりははるかにマシ。