zshのanything.elやunite.vimっぽい機能を実現するzaw.zshの簡単な紹介と、予めsourceを指定したキーバインドを設定する方法
巷にはemacsのanything.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の便利さをばりばり体感しているわけではないので、それらに慣れるといくつか機能追加したくなる気がしますが、ひとまずこれで幸せになれそうです。