シェルを使う上でディレクトリの移動に関する設定は欠かせません。
3つ以上のディレクトリを手早く移動したい時は、bash でもお馴染みの pushd
、popd
、dirs
を使用してディレクトリスタックの操作をするわけですが、いちいち出し入れするのが面倒です。
zsh のシェルオプション AUTO_PUSHD
を有効にすればディレクトリ移動時に元いたディレクトリが自動でスタックに積まれますが、dirs
で確認して移動するということが面倒という点は変わりません。
このような時は補完機能を使って楽をします。
以下の例は、補完システムの有効化とメニュースタイルを有効にしてカレントディレクトリは除くという設定です。メッセージ書式は好みです。AUTO_PUSHD
するときは DIRSTACKSIZE
で上限を決めておくとよいでしょう。
DIRSTACKSIZE=100
setopt AUTO_PUSHD
autoload -Uz compinit && compinit
zstyle ':completion:*' menu select
zstyle ':completion:*:cd:*' ignore-parents parent pwd
zstyle ':completion:*:descriptions' format '%BCompleting%b %U%d%u'
このように設定した状態でいくつかのディレクトリを渡り歩いたあとに cd -<TAB>
すると、
% cd /System/Library/Frameworks/JavaVM.framework/Versions/Current
% cd /var/log
% cd /usr/local/Cellar
% cd -<TAB>
Completing directory stack
1 -- /var/log
2 -- /System/Library/Frameworks/JavaVM.framework/Versions/Current
3 -- /Users/yoshikaw
こんな感じにディレクトリスタックが補完候補として出てきます。
そのまま TAB
を押せば1番目が選択状態になります。Ctrl-N
、Ctrl-P
で選択の移動もできます。もちろん直接数字を入力して ENTER
でも移動できます。
日々の作業に欠かせません。