zaw - zsh anything.el-like widget
zawはEmacsにおけるanything.el, helm.el,
あるいはvimにおけるunite.vimに対応するpluginです。
- 履歴の検索
- ディレクトリの移動
- gitの操作 (branchの切替, fileのステージ等)
- processの管理 (PIDの取得, kill)
- tmux (attach)
といったシェルでするべき事の大半がこのプラグインで非常に直感的に操作できます。
残念ながら、私には言葉でこのプラグインの素晴しさが伝えられないので
上のgifアニメをご覧ください。
anything.elやunite.vim等を使用した事のある方なら馴染みのある考え方だと思いますが、
zawでは source に action を結び付けます。
ディレクトリの移動においては source は最近訪れたディレクトリの一覧であり、
action はそのディレクトリに移動(cd)したり、パスを現在のコマンドラインに挿入する操作に相当します。
source に action をマッピングし、それらの選択をインクリメンタル検索する機能をzawが提供します。
install
導入は簡単です。zawをcloneして.zshrcからsourceするだけです。
git clone git://github.com/zsh-users/zaw.git
echo "source ${PWD}/zaw/zaw.zsh" >> ~/.zshrc
これでzshを再起動すれば使用できます。
- Ctrl-x; (^x;)でzawを起動する
- sourceの一覧がでるので^p, ^nで移動してEnterで決定
あとは表示されるactionを選んでEnterです。
^p, ^nで移動する際に文字を入力すると、インクリメンタル検索されます。
設定
よく使用するcdrやhistoryにはさらにショートカットが欲しい所。
私は以下のように設定しています:
autoload -Uz chpwd_recent_dirs cdr add-zsh-hook
add-zsh-hook chpwd chpwd_recent_dirs
zstyle ':chpwd:*' recent-dirs-max 500 # cdrの履歴を保存する個数
zstyle ':chpwd:*' recent-dirs-default yes
zstyle ':completion:*' recent-dirs-insert both
source $ZDOTDIR/zaw/zaw.zsh
zstyle ':filter-select:highlight' selected fg=black,bg=white,standout
zstyle ':filter-select' case-insensitive yes
bindkey '^@' zaw-cdr
bindkey '^R' zaw-history
bindkey '^X^F' zaw-git-files
bindkey '^X^B' zaw-git-branches
bindkey '^X^P' zaw-process
bindkey '^A' zaw-tmux
zaw-${source}
のようなのが zle (zsh line editor) コマンドです。
これはbindkey
で特定のキーマッピングを指定できます。