if/else を選択

a{ とか i{ によって対応する {} を選択することはできる*1けど,カーソル位置の if/else 全体を選択したいときがたまにあるので.
実装方法に悩んだけど,結局カーソル位置から前方に { を探していき,それが if/else によるものの場合はそこで止まって,それに対応する } まで選択する方法にした.
C っぽい文法だと使える.具体的には C, C++, Perl あたり.
C, C++ だと if (foo) bar; のように {} を省略できるけど,そのような場合には対応していない.
http://gist.github.com/410116

メモ

{} のように入れ子を許す構造を探すときは searchpair() が使える.
第5引数 {skip} に検索の途中に無視する条件を指定することができ,今回はシンタックスアイテムの名前が文字列や文字っぽいものの場合は無視している.
これにより文字・文字列中の {} を無視することができる.
search() にも {skip} を指定できると嬉しい場面がありそうなんだけど.
どうでもいいけど,この {skip} は普通の言語なら述語を渡す形になると思うけど,これを文字列で渡してしまうところが Vim script の残念なところの一つだと思う.

*1:詳しくは :help text-objects