zshでnvmを使うときに必要なこと(2011-05-10現在版)

node.jsの開発環境構築ではなくてはならない存在になったnvmですが
zsh環境だと色々面倒臭い。。。
今日(2011-05-10)取得した限りでは先人のtipsが結構取り込まれていたが
結局ちょいちょいはまったので備忘録ともしzshでnvmにハマっている方々の
ちょっとでも助けになれば。。。

変更点

進捗状況を表す#をzshが解釈してしまうので変更

zshが持っているextended_globという機能のため、
nvmで進捗を表す"#"がzshに解釈されてしまうようです。
なので、対応としてzshが持っている--progress-barというoptionを利用します。

curl -C - -# "http://nodejs.org/dist/node-$VERSION.tar.gz" -o "node-$VERSION.tar.gz" && \
↓
curl -C - --progress-bar "http://nodejs.org/dist/node-$VERSION.tar.gz" -o "node-$VERSION.tar.gz" && \
node.jsのバージョン取得がエラーになるのでzshでオプション設定

nvmでのnode.jsのバージョン取得のロジックが

VERSION=`(cd $NVM_DIR; ls -d v${PATTERN}* 2>/dev/null) | sort -t. -k 2,1n -k 2,2n -k 3,3n | tail -n1`

このようになっており、$PATTERNには「*.*[02468].」、「*.*.」が入るのですが
zshがdefaultだと文字列としてしか展開しないので
v*.*[02468].はありませんとかエラーを吐いてしまう。。。

そこでGLOB_SUBSTを有効にするするときちんとディレクトリにマッチングしてくれる

vim ~/.zshrc
============================
setopt globsubst
============================

ただし、unsetopt globsubstが既存の設定とぶつかることもありえるので
要注意な感じで。。。
自分は特に問題なかったのでそのまま利用しました

参考にさせていただいたサイト

progresss-barについて
http://d.hatena.ne.jp/cou929_la/20110417/1303029314

バージョン取得周りについて
http://www.ryuone.com/diary/20110312.html