im_control.vim - <C-^>でIM切替が行える場合
「<C-^>でIMの切替が行える」場合の設定例です。
基本的に挿入モードからノーマルモードへ移行した時にIMが自動でオフになるVimなら使用可能です。
一部のVimのようにIM制御動作が独自仕様に変更されている場合はオリジナルの動作と同じになるようにオプション等で設定してください。
(挿入モードで<C-^>でIMの切替を行なってからノーマルモードへ戻り、再び挿入モードへ移行するとIMが自動でオンになる状態が前提です)
「<C-^>でIMの切替が行える」場合は以下を .vimrcへ追加してください。
" 「日本語入力固定モード」の動作モード
let IM_CtrlMode = 4
" 「日本語入力固定モード」切替キー
inoremap <silent> <C-j> <C-^><C-r>=IMState('FixMode')<CR>
他の方法を使う場合と違い、キーマップに <C-^> が付いているので気をつけてください。
Windowsではデフォルトで IM_CtrlMode=4 に自動設定されるので、切替キーだけ設定すれば動作します。
<C-^>を GVimでしか使えない場合は、切り分けて使用した方がよいかもしれません。
if has('gui_running')
" 「日本語入力固定モード」の動作モード
let IM_CtrlMode = 4
" GVimで<C-^>が使える場合の「日本語入力固定モード」切替キー
inoremap <silent> <C-j> <C-^><C-r>=IMState('FixMode')<CR>
else
" 非GUIの場合(この例では「日本語入力固定モード」を無効化している)
let IM_CtrlMode = 0
endif
この例では非GUIの場合に「日本語入力固定モード」を無効化していますが、「IMCtrl (制御用関数)の設定」などでIM制御可能な場合は非GUI用の設定を環境に合わせて設定してください。
以上の設定で「日本語入力固定モード」が使用可能になります。
「日本語入力固定モード」の切替ではなく単純なIMのOn/Offも行えるので、IM自体のキーマップに関係なくVimの挿入モードでのみ有効なIM切替キーを設定可能です。
" 「日本語入力」切替キー
inoremap <silent> <C-k> <C-^><C-r>=IMState('Toggle')<CR>
Windowsではこれで終了ですが、MacVim-KaoriyaのようにIM制御処理が独自改変されている場合は以下を参照してください。
MacVim-Kaoriya
(重要)
MacVim-KaoriyaのGVimではIM_CtrlModeの設定を .gvimrc ではなく .vimrc に書かないと様々な不具合が起きるようです。
基本的には以下を .vimrc へ追加するだけで使用可能です。
" 「日本語入力固定モード」の動作モード
let IM_CtrlMode = 4
" 「日本語入力固定モード」切替キー
inoremap <silent> <C-j> <C-^><C-r>=IMState('FixMode')<CR>
noimdisableactivate
デフォルトでは im_control.vimが自動設定を行うので気にする必要はないのですが、MacVim-Kaoriyaでim_control.vimを使用するには noimdisableactivate を設定する必要があります。
ただし noimdisableactivateは逆に .vimrc ではなく .gvimrc で設定しないと有効になりませんので明示的に指定する場合は気をつけてください。
なおMacVim-Kaoriyaの仕様変更等で noimdisableactivateの設定を変える必要がある場合は「日本語入力固定モード」の MacVim-Kaoriya対策を無効化してください。
.vimrc
" 「日本語入力固定モード」のMacVimKaoriya対策を無効化
let IM_CtrlMacVimKaoriya = 0
.gvimrc
" MacVim-Kaoriya(GVim)で日本語入力(IM)自動オン/オフ
" noimdisableactivateは .gvimrcで設定する必要があります
set noimdisableactivate
Windows
Windowsの場合はim_control.vimを使用しない単純なキーマップだけでも「日本語入力固定モード」を使用可能です。
以下を .vimrcへ追加します。
" 「日本語入力固定モード」の切替キー
inoremap <silent> <C-j> <C-^>
" <ESC>でのIME状態保存を無効化
inoremap <silent> <ESC> <ESC>
inoremap <silent> <C-[> <ESC>
状態表示やバッファごとの状態制御は行えませんが、使い方は「日本語入力固定モードの使い方」と同じです。