今夜もLab.に独り

蛙飛び込むVimの音

cdの履歴保存(ディレクトリスタック)

ArchWikiのZshページにディレクトリスタックの項目があった。

Zsh - ArchWiki

これが結構便利なんだけれど,シェルを複数開いていると機能しない。

そして俺は普段からターミナルのタブを大量に開いているのでこのままじゃ使えない。ので改変した。

やったこと

ArchWikiの記述をベースにしつつ, シェルを開く毎に個別のディレクトリスタックファイルを作成できるように,.zshrcへ以下を加筆。

DIRSTACKFILE="$HOME/.cache/zsh/dirs/`\date +%d%M%N`"
if [[ -f $DIRSTACKFILE ]] && [[ $#dirstack -eq 0 ]]; then
  dirstack=( ${(f)"$(< $DIRSTACKFILE)":} )
  [[ -d $dirstack[1] ]] && cd $dirstack[1]
fi
chpwd() {
  print -l $PWD ${(u)dirstack} >$DIRSTACKFILE
}

DIRSTACKSIZE=20

setopt autopushd pushdsilent pushdtohome
setopt pushdignoredups
setopt pushdminus

DIRSTACKFILEに時刻の情報を付けて,重複を回避しただけ。

自分の環境だとdateコマンドにはエイリアスを設定しているので,1行目は\dateにした。 %d%M%N日付分ミリ秒を出力させる。

DIRSTACKSIZEは何となく20にした。

できたこと

すごーい!いくらでもシェルを開けるんだね!

便利なところ

あちこちcdしていじっている時に

$ cd -

と打ってから<tab>とかすると幸せになれる。かも。 詳しくはArchWiki参照。