Vim:インサート・モードを抜けたら IME を無効にする

以前「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

既に .vimrcaugroup が有れば、その中に追記で OK。

ついでに InsertLeave 以外に、コマンド・ライン・ウィンドウから抜けるとき (CmdwinLeave) も、IME を OFF とした。コマンド・ライン (CmdlineLeave) もと思ったのだが、

  • ターミナルだと補完のプラグインとの相性が悪い
  • GUI (Gvim) でも入力がもたつく

なので取りやめ。