はじめに
ディレクトリを移動する際に使われる、ディレクトリスタックという概念をご存知でしょうか?ディレクトリ移動はcdが圧倒的な知名度を誇っているので、便利な機能ですが意外と知られていないかと思います。
例えば決まったディレクトリを頻繁に移動することがあり、その場所が分からなくなる人などには丁度良い機能ですので、是非使ってみることをおすすめします。
使い方
普段のディレクトリ移動の感覚でcdの代わりにpushdで移動先を指定してみて下さい。
$ pushd ~普通に移動が出来たかと思います。次に別のディレクトリを指定してみて下さい。
$ pushd ~/WorkまたしてもWorkディレクトリ(指定したディレクトリ)に移動出来たかと思います
ここでdirs -vとコマンドを入力します。
$ dirs -v
0 ~/Work
1 ~この様にpushdで指定したディレクトリがディレクトリスタックに追加されています。
更にここでpushd +1と入力するとどうなるでしょうか。
$ pushd +1
~/Workに移動する
$ dirs -v
0 ~
1 ~/Workディレクトリを指定しなくても移動することが出来ました。つまりディレクトリスタックを使用すると一度移動したディレクトリパスを、入力することなくスタックから参照することが出来ます。
ちなみにスタックから削除したい場合はpopdを使用します。
$ dirs -v
0 ~
1 ~/Work
$ popd +1
$ dirs -v
0 ~これがディレクトリスタックです。
おまけ
shell起動時にディレクトリスタックを貯めるスクリプトです。例えば~/Workに複数のリポジトリを管理している場合に、それらのディレクトリパスを自動でスタックするというスクリプトです。
CDIR=`pwd`
ls -ld ~/Work/* | grep ^d | sed -E 's/ +/ /g' | cut -d" " -f9 | while read DIR
do
if [[ $DIR != $CDIR ]]; then
pushd $DIR
fi
done上記のコードを~/.zshrcに追記して再起動するだけです。
終わりに
ディレクトリスタックを本格的にcdコマンドの代わりに使おうと考えている方はエイリアスを登録しておくと良いと思います。cdが2文字なのに対してpushdは5文字あるので移動3回分(切り上げ)のキーストロークが生じてしまいます。これでは威力が半減してしまうので、pdとかにすると良いと思います。
dirs -vもエイリアスで最初からdirsで入力されるようすると良いです。もっと言うとpecoも組み合わせた方が絶対に良いです。