Vim. 検索と置換時の IME 制御。autocmd と CmdlineEnter

autocmd にて、IME の自動 ON/OFF を設定している場合のコマンドラインモード(:と/?)の扱い。

augroup Example
    autocmd!
    autocmd InsertEnter * call {自動でONするかどうか制御する関数}
    autocmd CmdlineEnter [/\?] call {自動でONするかどうか制御する関数}
    autocmd InsertLeave,CmdlineLeave,CmdwinEnter,CmdwinLeave * call {強制的にOFFする関数}
augroup End

2つ目の autocmd CmdlineEnter。* ではなく、[/\?] と書けば、検索時は IME ON (日本語)だけど、: で入るコマンドラインモードは IME OFF という仕分けができる。

IME の制御方法は OS や Vim のコンパイルの仕方によってそれぞれ違うが、autocmd によるモードチェンジの制御は共通で使えるはず。

今までやり方を知らずに検索は問答無用で IME OFF でスタートでも止む得ないと思っていた。だから <Space>/{任意のキー} のような感じで特定の全角文字列の検索用にキーマップを割り当てたりしていたが、結局あまり使っていなかった。

設定をいじるなら、できるだけ根元に近い動作に手をつけたほうが定着しやすいということかもしれない。

ちなみに置換モード (R) は InsertEnter / InsertLeave で扱われているが、1文字だけの置換 (r) はあくまでもノーマルモード扱いらしく無視される。個別の割り当てはないようだ。

r を押したら自動で IME ON になり、かつ、本来の r のように count を受け付けたり . でリピートできるようにするには、キーマップをちょっといじったところでまともに対処できないのでそれ専用にスクリプトを作るしかないらしい。本来の動きを変えてまで自動で IME を切り替えたい訳ではないので今回は放置する。いずれ腰を据えて試してみたい。