zshのanything.elやunite.vimっぽい機能を実現するzaw.zshの簡単な紹介と、予めsourceを指定したキーバインドを設定する方法

巷にはemacsanything.elを呼び出してzshで幸せになる方法があるようですが、emacs入れる必要があるのでvimに改宗した私としては導入が面倒でやりたくありません。うれしいことに、ちまたにはzaw.zshというものがあり、これはzshだけで実装されたanything.elっぽい処理をしてくれるスクリプトらしいです。導入は簡単で、git cloneしてzaw.zshを読み込むだけ。ただしzsh-4.3.10が必要です。4.3.9だとエラーがでました。

$ git clone https://github.com/nakamuray/zaw
$ cd zaw
$ source zaw.zsh

あとは '^X;'(デフォルトのbindkey)を押すと、sourceの一覧が表示されるので、適当に選択。historyあたりがわかりやすいかも。sourceを選択すると、あとはリストからのインクリメンタルな絞り込みができる。どこかでhistory-incremental-pattern-search-{backward,forward}を設定するとlife changingになるよ!!!!!!!!!!!!!!!!とかありましたけど、zaw.zshなら絞り込まれた結果が一覧できてもっとlife changingだと思います。設定も上記のように簡単ですし。

本題

ただ、気になることは、毎度sourceを選択する必要があるところ。個人的にはhistoryとか頻繁に使いそうなので、ここは1hopで操作できるようにしたい。これを実現するには以下のような設定を行えば良いみたいです。

zsh-history() {
  zaw zsh-src-history
}
zle -N zsh-history
bindkey '^Xh' zsh-history

もともとzawの実装であるzaw関数は引数にsourceを指定できるようなので、sourcesフォルダの中をみて、historyのsourceの関数名を探して指定し、新しいwidgetを作成しただけです。

これでCtrl-x hと押すと即historyの一覧が表示されてlife changingですね。まだあまりanything.elとかunite.vimの便利さをばりばり体感しているわけではないので、それらに慣れるといくつか機能追加したくなる気がしますが、ひとまずこれで幸せになれそうです。