IME ON/OFF でカーソルの色を変える(colorscheme変更に対応)

Vim で編集を行っている際に IME を有効にしているかどうかを視覚的にわかるようにしたい。 ということで、highlight コマンドにてカーソルの強調表示を行うように設定している。

CursorIM のヘルプには以下の行を gvimrc に記述するようにサンプルが載っている。

if has('multi_byte_ime')
    highlight Cursor guifg=NONE guibg=Green
    highlight CursorIM guifg=NONE guibg=Purple
endif

強調表示設定は colorscheme 設定後に行う必要があるため、上記内容を特定の colorscheme ファイルの最後尾に書いていた。

しかし、これだとその colorscheme を設定した場合しか反映されないため改善を試みた。

結論は gvimrc ファイルに以下の設定を追記することで対応した。

function! s:CursorColor()
    highlight Cursor guifg=NONE guibg=Green
    highlight CursorIM guifg=NONE guibg=Purple
endfunction

augroup ColorSchemeHook
    autocmd!
    autocmd ColorScheme * call s:CursorColor()
augroup END

gvimrc で colorscheme コマンドを記述する場合は上記の定義の後に記述しなければ GVim 起動時にカーソルの強調表示が設定されないので注意

autocmd ColorScheme によってカラースキーマを読み込んだ際に s:CursorColor() 関数が呼ばれ、カーソルの強調表示が設定される。 colorscheme コマンドを実行する度に s:CursorColor() 関数が呼ばれるため colorscheme を変更した場合もカーソルの強調表示が設定されるようになる。