最近日本語の文章をちょっと多めに書く機会がある。そのために端末上の vim を使っているわけなのだが。
いまさら書くまでもないのだが、vi と IME を経由した入力の相性はとっても悪い。特に、ノーマルモードにいる状態で IME がオンになっている場合にぐぬぬとなる。せめてこれだけでもなんとかならないのだろうか。
IME が fcitx 上で動いている場合、[cci]/usr/bin/fcitx-remote[/cci] コマンドによって IME の状態を操作することができる。なので、vim のそれっぽいイベントに自動コマンドを引っ掛けて fcitx-remote を適当に呼んでやる。
autocmd InsertLeave * silent! !fcitx-remote -c
こうすると insert モードを抜けた時、必ず IME がオフになる。これでいくらかましになるかなー。
ちなみに wasavi の場合、ノーマルモードに戻るとやはり自動的に IME が無効になるようにしてある。実はノーマルモードでキーボード入力を受けるのは、隠された input[type=”password”] 要素なのだ。大抵のブラウザが、この要素がアクティブなときは IME を無効にすることを利用している。
残念ながら、IME の状態を直接的に制御するような API は javascript にはまだない。