以前「Vim で Esc を押したら、IME を OFF」を書いたが、プラグインの組み合わせで上手くいかないケースが出てきたために別の方法に切り替えた。100 % 上手く行くわけではないが、問題の発生頻度は格段に減ったので。
ポイントは
- Esc の動きを変えるのではなく、件名通り「インサート・モードを抜けたら」を条件にする
- IME の無効化を Ctrl だけとの組み合わせだと Esc と同じ働きをする Ctrl+[ の Ctrl と重なってしまうので Ctrl+Shift+無変換 に変更
IME の設定などは以前の記事を参考にしてもらうとして、.vimrc に次のように記述する。
augroup VIMRC
if has('unix') " インサート・モードを抜けた時は必ず日本語 OFF
autocmd InsertLeave,CmdwinLeave * call system('xvkbd -text "\C\S\[Muhenkan]" > /dev/null 2>&1')
endif
augroup END
既に .vimrc に augroup が有れば、その中に追記で OK。
ついでに InsertLeave 以外に、コマンド・ライン・ウィンドウから抜けるとき (CmdwinLeave) も、IME を OFF とした。コマンド・ライン (CmdlineLeave) もと思ったのだが、
- ターミナルだと補完のプラグインとの相性が悪い
- GUI (Gvim) でも入力がもたつく
なので取りやめ。