Windowsのgvimで日本語入力を使いやすくする

vim/gvimでは日本語が使いにくいと言われます。
しかし挿入モードのみで扱っている場合、違いが出るわけではありません。
簡単な移動や編集はカスタマイズして一通りのことは出来ます。(Emacs風なカスタマイズ例)
ただしノーマルモードと挿入モードを頻繁に行き来する場合はIMEの切替が面倒くさくなる事もあります。


Windowsgvimの場合はIMEの制御が可能なので、自分の好みに合わせてカスタマイズしてやるとかなり使いやすくなります。
Linuxの場合は「Linuxのgvimで日本語入力を使いやすくする」です。


まずわかりやすくするためにIMEの自動制御を無効にします。

"挿入モード終了時にIME状態を保存しない
inoremap <silent> <ESC> <ESC>
inoremap <silent> <C-[> <ESC>

"IMEモード固定
inoremap <silent> <C-j> <C-^>

なぜかこのようにマップするとIMEの自動ON/OFFがでは無効になります。


これでソースコードに日本語でコメントを書くような時には、

  1. 挿入モードに入ってIME ON
  2. コメントを書く
  3. で挿入モードを抜ける
  4. 再び挿入モードへ

で自動的にIMEがOFFになります。


次に日本語をがっつり入力したい場合は、

  1. 挿入モードに入ってIME ON
  2. なにかを書く
  3. で挿入モードを抜ける
  4. 再び挿入モードへ

で今度はIMEが自動制御でONになります。
ノーマルモードで移動して、また日本語を入力したい場合に便利かと思います。


なお日本語入力固定にしてからノーマルモードへ抜けての f コマンドや r コマンドなどで IMEが ONになっています。
日本語入力固定でもノーマルモードの f コマンド等ではIMEがOFFになって欲しい場合には以下のスクリプトを追加してください。
ソースコードのドキュメントなどを書いている場合には、こちらの方が便利かもしれません。

"fコマンド等でのIMEをOFFにする
let g:IMState = 0
augroup InsertHookIME
  autocmd!
  autocmd InsertEnter * let &iminsert = g:IMState
  autocmd InsertLeave * let g:IMState = &iminsert|set iminsert=0 imsearch=0
augroup END


その他に行連結のため次の設定を .vimrc に追加しても良いと思います。

"日本語の行の連結時には空白を入力しない。
set formatoptions+=mM


またW,B,Eですが、これは空白のみを基準に移動するコマンドで、日本語の場合はほとんど使い道がありません。
これが日本語の時だけ "、。" などでも止まるようにすると、長い日本語の行内を移動する時に便利だと思い、スクリプトを書きました。
移動コマンドw,b,W,E,Bのカスタマイズ

自分は日本語を割とよく書くので重宝しています。
このスクリプトは、vimを使い始めた頃に書いたスクリプトで正直な所、実にひどいソースなのですが、W,B,Eを"、。"に対応させるとどういう感じかはつかめると思います。

Emacs風なカスタマイズ例には挿入モードで"、。"で、カーソルを一時停止するためのスクリプトもあります・