zaw-cdrで helm.el(anything.el)っぽくにディレクトリ移動をする
この記事は zsh advent calendar 2012の 19日目の記事です。
zaw-cdrとは
zshの 4.3.15に導入された cdrという最近いたディレクトリに移動する
コマンドの zawインタフェースです。これで最近いたディレクトリに超絶楽に
移動することができます。私はこれを導入して、pushdとか autopushdの類を
利用するのをやめました。人にもよるかと思いますが、ディレクトリ移動の
多くは過去に移動した場所への移動になると思うので、多くの人にとって
役立つのではないかと思います。
使うのにはいくらか慣れが必要ですが、普段から helm(anything),
unite(Vimは使えないので詳しくわからないですが、たぶん似ていると思います)を
使っている人であれば難なく導入することができると思います。
メリット
目的のもの絞り込みが簡単
ディレクトリパスの途中だけでもわかっていれば絞り込むことができるので
楽に目的のものを探すことができます。とりあえず文字を打ってから詳細を
思い出すという流れで絞り込めるので、余計なことに頭を使う頻度が減ります。
インストール
githubから cloneしてください
% mkdir -p ~/.zsh % cd ~/.zsh % git clone git://github.com/zsh-users/zaw.git
設定
.zshrc等の設定ファイルに以下を追加します。
source ~/.zsh/zaw/zaw.zsh bindkey '^[@' zaw-cdr # 私は M-@にバインドしています
おまけ
zawではプラグインを書くことができます。zawの sourcesディレクトリに
プラグインを追加することで利用することができます。
以下に拙作の gitリポジトリ内のディレクトリに移動するための sourceを
示します。自分で作っといてあれですが、なかなか便利です。
# # zaw-src-gitdir # # zaw source for git command # function zaw-src-gitdir () { _dir=$(git rev-parse --show-cdup 2>/dev/null) if [ $? -eq 0 ] then candidates=( $(git ls-files ${_dir} | perl -MFile::Basename -nle \ '$a{dirname $_}++; END{delete $a{"."}; print for sort keys %a}') ) fi actions=("zaw-src-gitdir-cd") act_descriptions=("change directory in git repos") } function zaw-src-gitdir-cd () { BUFFER="cd $1" zle accept-line } zaw-register-src -n gitdir zaw-src-gitdir
設定
bindkey '^[#' zaw-gitdir # M-#にバインド
おわりに
zaw-cdrについて紹介しました。
明日は @sempreffさんの担当です。お楽しみに。