anzu.vim の動作を高速化した。それと Patch 7.3.867 で追加された便利なアレ

この記事は Vim Advent Calendar 2012 261日目の記事になります。



と、いうツイートを見かけたのでついカッとなって anzu.vim にキャッシング処理を追加しました。
検索結果をキャッシングする事で、2回目以降は高速で処理するようになります。
このキャッシュは『カレントバッファのテキストが変更されたとき』にクリアされます。
anzu.vim については VAC の『Vim で現在の検索位置を表示する』を参照してください。


また、この変更で anzu.vimVim 7.3.867 以上が必須になります(理由は後述参照。

[Patch 7.3.867 で追加された便利なアレ]

さすがに anzu.vim ネタだけでは物足りないので Vim 7.4 で追加された便利な機能の紹介でも。
Patch 7.3.867 で次の autocmd が新しく追加されました。

  • TextChanged
  • TextChangedI


これは両方共『カレントバッファのテキストが変更されたとき』に呼ばれる autocmd になります。
TextChanged はノーマルモードで、TextChangedI はインサートモードでそれぞれ呼ばれます。
anzu.vim ではこれを利用してキャッシュのクリアを行っています。


7.3.867 以前では次のように b:changedtick を使用するような処理を行う必要がありました。
しかし、この autocmd を使用すればその必要はなくなります。

" :help b:changedtick 参照
if my_changedtick != b:changedtick
   let my_changedtick = b:changedtick
   call My_Update()
endif


anzu.vim のようにバッファの内容をキャッシングしたい場合などで活用できると思います。
まぁ新し目の Vim でしか使用できないんですが…しかし、Vim 7.4 もリリースされたので新しく使える機能はもりもり使っていきたいですね。