zsh でも popd, pushd とかあるけれど、使用時間が長くなると結局意味がなかったりしてイマイチ。
また、端末を新たに開いて続きの操作を!って時もいちいち cd するのも面倒なので、端末を開いたら pwd に自動で移動できればといつも思っていた。
これらの問題を解決する瞬間芸的 Tips がこれです。
AUTOJUMP
autojump は cd の履歴管理だけど、移動頻度に応じて表示が上に来るという優れもの。以下のように brew や git などで容易にインストールできる。
% brew install autojump
zsh の設定
zsh のオプションとして、
setopt auto_cd # ディレクトリ名と一致した場合 cd
setopt autopushd
setopt pushd_ignore_dups # 同じディレクトリは追加しない
を指定しておく。
また、zsh の precmd() 関数を用いて、
#--- zsh 用の設定 ---
. /usr/local/etc/autojump.zsh
#--- cd 時の仕掛け ---
function precmd () {
pwd=`pwd`
echo "[^[[35m$pwd^[[m]"
autojump -a $pwd
echo $pwd > ~/.curdir
}
といった設定をすることで、change dir(cd) する度に
- path 指定のみで cd 実行
- pwd をプロンプトの前の1行に表示
- 指定した path を autojump に追加
- 実行の度に pwd 保存
が実行されることになるので、autojump と zsh がよりシームレスに利用できるようになる。
また、.zshrc の最後の行に、
cd `cat ~/.curdir`
とすることで、端末を新規に開くと自動的に前回のカレントディレクトリに移動して始めることができる。
たった1行の設定だが自動的に前回の pwd に移動するので、端末作業中にもう1つターミナルを開きたいとか、中断した作業を再開するといった場合にとても便利で、日々の小さなストレスを軽減する設定として個人的にはとても気に入っている。
注意点
smb mount したフォルダをカレント・ディレクトリとして保存したまま umount すると悲しいことになります。ご注意ください;-)
precmd() に除外するディレクトリ処理を入れるなどした方がよいかも。