CDPATH(2/2)

前回「CDPATH(1/2)」では、「autojump」のデータベースからホットなディレクトリを標準出力に出すスクリプトまで作りました。
今回は、それを使って、いろんなシェルで環境変数「CDPATH」を設定します。

1.sh系/ksh系

bashやzshも含めて、これらは同じ「~/.profile」で定義しても大丈夫です。
各ディレクトリ名を「:」 で繋ぐために「-s」オプションを使用します。

# よく使うディレクトリ
CDPATH=`cdpath_helper -s`; export CDPATH

zshの場合は、環境変数「CDPATH」を設定すれば、シェル変数「cdpath」も自動的に作成してくれます。
zshには他にもpath関係のシェル変数がありますので、まとめて、

# 重複したpathは省く
typeset -U path cdpath fpath manpath

とかしておくと良いかもしれません。

2.csh系

csh系は、zshとは違ってシェル変数「cdpath」は自前で準備します。
環境変数「CDPATH」は上と同じく各ディレクトリを「:」で繋ぎますが、シェル変数「cdpath」は「 」(空白)で繋ぎますので、「-c」オプションを使用します。

# よく使うディレクトリ(環境変数)
setenv CDPATH `cdpath_helper -s`
# よく使うディレクトリ(シェル変数)
if ($?prompt) then
    set cdpath = `cdpath_helper -c`
endif

環境変数はログイン時にだけ、シェル変数はインタラクティブ時にだけ、それぞれ設定されるようにしてくださいな。
一番簡単なのは、「~/.login」に環境変数、「~/.cshrc」にシェル変数を置く方法だと思います。

3.rcrc

rcは上のcshと同じく環境変数「CDPATH」は「:」でディレクトリ名を繋ぎますが、シェル変数「cdpath」は勝手に作ってくれますので、普通に「$HOME/.rcrc」に書くだけで大丈夫です。

 # よく使うディレクトリ
CDPATH=`{cdpath_helper -s}

4.fish

最後はfishです。
fishは「~/.config/fish/config.fish」で設定すれば良いのですが、ここに来る前に「CDPATH」が既に設定されています。
迷いに迷ったんですが、今回は、既に入っているものを捨てることにしました。

# よく使うディレクトリ
set -l cd_path_list
set -l cd_path_helper (echo set cd_path_list (cdpath_helper -c))
eval $cd_path_helper

# fishのCDPATHを設定する
set CDPATH . ~
for i in $cd_path_list
    if not contains $i $CDPATH
        if test -d $i
            set CDPATH $CDPATH $i
        end
    end
end

# 環境変数にも展開する
set -gx CDPATH $CDPATH

まず、最初のブロックで、空白で繋いだローカル変数「cd_path_list」を作成します。
一度出力をローカル変数「cd_path_helper」で受けて「eval」するとかいう、ややこしいことをしている理由は、「cd_path_list」を単一文字列ではなくリスト構造にするため。
(何とかならんもんですかねぇ・・・これ)

2番目のブロックで、生成された「cd_path_list」の中身を、順番に、重複しないよう、存在しないディレクトリが入らないよう、シェル変数「CDPATH」に放り込んでいます。
名前は大文字でも、この段階ではまだシェル変数です。

最後のブロックで、ようやく環境変数「CDPATH」となります。

$ echo $CDPATH
とすると、ディレクトリ名が「 」(空白)で繋がれたシェル変数「CDPATH」が表示されますが、
$ env
とすると、ディレクトリ名が「:」で繋がれた環境変数「CDPATH」が表示されますので、違いが判断できます。

これで「MacVim」もまた使いやすくなってきました。

 

CDPATH(2/2)」への1件のフィードバック

  1. ピンバック: CDPATH | VivaFan通信

コメントをどうぞ