Summary
zsh の組み込みコマンド cdr は cd の履歴を保存してくれる。存在しないディレクトリも履歴に残ったままになってしまうので、自動でメンテナンスをさせたい。
autoload -Uz is-at-least
if is-at-least 4.3.11
then
# cdr, add-zsh-hook を有効にする
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
add-zsh-hook chpwd chpwd_recent_dirs
add-zsh-hook chpwd my_compact_chpwd_recent_dirs
# cdr の設定
zstyle ':completion:*' recent-dirs-insert both
zstyle ':chpwd:*' recent-dirs-max 5000
zstyle ':chpwd:*' recent-dirs-default true
zstyle ':chpwd:*' recent-dirs-file "$HOME/.cache/shell/chpwd-recent-dirs"
zstyle ':chpwd:*' recent-dirs-pushd true
function my_compact_chpwd_recent_dirs() {
emulate -L zsh
setopt extendedglob
local -aU reply
integer history_size
autoload -Uz chpwd_recent_filehandler
chpwd_recent_filehandler
history_size=$#reply
reply=(${^reply}(N))
(( $history_size == $#reply )) || chpwd_recent_filehandler $reply
}
fi
pecoと連携
function peco-cdr () {
local selected_dir=$(cdr -l | awk '{ print $2 }' | peco)
if [ -n "$selected_dir" ]; then
BUFFER="cd ${selected_dir}"
zle accept-line
fi
zle clear-screen
}
zle -N peco-cdr
bindkey '^[xcd' peco-cdr # M-x cdに割り当て
Reference
DevAchive - 2014-09-22 - cdr: 開いたディレクトリの履歴からディレクトリを開くhttp://wada811.blogspot.com/2014/09/zsh-cdr.html
@znz blog - 2014-07-25 - zshの機能のみで既に存在しないディレクトリをcdrのリストから削除する
http://blog.n-z.jp/blog/2014-07-25-compact-chpwd-recent-dirs.html