vi には sentence、paragraph、section 単位でカーソルを移動させるコマンドがある。それぞれの定義は正確になされている。
wasavi では、それぞれのブロックの境界を見つけるのに定義に従った正規表現で楽しようとしていて、それはそれでそれなりに動いてはいるのだが、実は現状の実装だと vim や nvi と互換な動きをしていない。ちゃんと互換させようとすると正規表現だけで済ますのはちょっと難しいかもしれない。特に空行の扱いが難しい。vim や nvi ではそれぞれ謎のルールの仕込まれたループで境界を見つけている。
そういうわけでそのへん、つまり search.c 内のブロック系関数一式もごっそり移植せざるを得ない感。ちなみに sentence の検索関数だけ見ると nvi のほうがすっきりして分かりやすい気がする。
そしてこれは wasavi 側にしてもなかなかに大掛かりな書き換えになるのであった。
* * *
javascript 製のコードエディタ Ace の 1.0 が公開された。これは 1.0 未満の状態でも割と前から公開されていて、オンラインデモも試すことができた。そのなかで、キーバインディングを vim 互換にすることもできたのだが、その再現具合は長らく「ううん……」というものだった。
で、今回 1.0 に達したということで久しぶりに試して見たらけっこうよくなってた。でも ex コマンドはない? 世の中の javascript で再現した系の vi クローンはなんでことごとく ex コマンドを実装しないのかなあ。