はじめに
ディレクトリを移動する際に使われる、ディレクトリスタックという概念をご存知でしょうか?ディレクトリ移動は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も組み合わせた方が絶対に良いです。