Vimの日本語入力を快適にする設定

Control!今回は、Vimの日本語入力を快適にする設定を紹介します。
photo credit: .faramarz



Vimには、ノーマルモードとインサートモードというものがあります。特に、文章を書く場合、インサートモードで日本語入力を行うことが多いかと思いますが、ノーマルモードでは、日本語入力を止めて、IMEをOFFにする場合が多いかと思います。


このような事情があるため、初期設定では、インサートモードからノーマルモードに移行する際や移行した後、頻繁に っj:あ などといったことが起こります。


そして、そういうことが連続すると、非常にがっかりしてしまうことも事実です。


そんな時は、 日本語入力固定モード を利用できるプラグインを入れたり、以下の設定をすると、インサートモードからノーマルモードに移行した際、がっかりすることも少なくなるともいます。


"### C-jでノーマルモードに移行する
inoremap <silent> <C-j> <ESC>

"### jfでノーマルモードへ移行する
"^^^ Tips
"^^ jfを入力する際は、jff<BS>とでもします。それが面倒なら、jffをjfに自動変換する設定を書きます
"^^ IMEで日本語入力ON時にアルファベット半角の設定をしておくと、jf+Enterでノーマルモードに移行できます
inoremap <silent> jf <ESC>

"### Tera TermでIME制御
" http://ttssh2.sourceforge.jp/manual/ja/usage/tips/vim.html
"## 挿入モードから抜けた時に IME をオフにし、再度挿入モードに入った時に IME の状態を元に戻す
let &t_SI .= "\e[<r" let &t_EI .= "\e[<s\e[<0t" let &t_te .= "\e[<0t\e[<s" set timeoutlen=100
"## 挿入モードでの ESC キーを押した後の待ちを無くす
let &t_SI .= "\e[?7727h"
let &t_EI .= "\e[?7727l"
inoremap <special> <Esc>O[ <Esc>
"## GNU Screenとの併用
if &term == "screen"
let &t_SI .= "\eP\e[3 q\e\\"
let &t_EI .= "\eP\e[1 q\e\\"
else
let &t_SI .= "\e[3 q"
let &t_EI .= "\e[1 q"
endif

"### gVim IME常時無効化設定
" http://blog.blueblack.net/item_393
"## 「imdisable」オプション
augroup InsModeAu
autocmd!
autocmd InsertEnter,CmdwinEnter * set noimdisable
autocmd InsertLeave,CmdwinLeave * set imdisable
augroup END
"## IME状態に応じたカーソル色を設定
if has('multi_byte_ime')
highlight Cursor guifg=#000d18 guibg=#8faf9f gui=bold
highlight CursorIM guifg=NONE guibg=#ecbcbc
endif



もし、Macで1段目の設定を採用したなら、 KeyRemap4MacBook を使うと便利です。


システム環境設定 >
vim_ime


<?xml version="1.0"?>
<root>
<list>
<item>
<name>LeaveInsMode with EISUU(Terminal)</name>
<identifier>private.app_terminal_esc_with_eisuu</identifier>
<only>TERMINAL</only>
<autogen>--KeyToKey-- KeyCode::ESCAPE, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen>
<autogen>--KeyToKey-- KeyCode::J, VK_CONTROL, KeyCode::J, VK_CONTROL, KeyCode::JIS_EISUU</autogen>
</item>
</list>
</root>



vim_ime


これで、Terminal上で EscCtrl+j を押した場合、IMEがOFFになります。