Vim:挿入/ノーマルモードでステータス・ラインの色を変える

Vim はモードが有るので、それが視覚的に区別できると編集しやすい

そこで私は「vim/gvimの色設定について―挿入モードでステータスラインの色を変更する」を参考にステータス・ラインとターミナルで使用している時はタブ・ラインも変えている

なおステータス・ラインでなくタブ・ラインでは StatusLineTabLine, TabLineFill, TabLineSel の 3 つを使えば良い。

ただここでこのサイトに有る設定そのままでは、「インサートモードに入ったときの遅延読み込みによる影響」に有る通り、挿入モードのタイミングで遅延読み込みしているプラグインが有ると上手くいかない。これは遅延読み込みにより、InsertEnter が複数発生するためで仕様となる。

逆に言えば、同じモードでは無視すれば良いので、私は数行追加して次の要領で使っている。

let g:hi_insert = 'highlight StatusLine gui=bold guifg=white guibg=darkred cterm=bold ctermfg=white ctermbg=Red' " 挿入モード時のスタイル好みによって変えて if has('syntax') augroup InsertHook autocmd! autocmd InsertEnter * call s:StatusLine('Enter') autocmd InsertLeave * call s:StatusLine('Leave') augroup END endif let s:slhlcmd = '' let s:mode= '' function! s:StatusLine(mode) if s:mode == a:mode return endif silent! let s:mode = a:mode if a:mode == 'Enter' silent! let s:slhlcmd = 'highlight ' . s:GetHighlight('StatusLine') silent exec g:hi_insert else highlight clear StatusLine silent exec s:slhlcmd endif endfunction function! s:GetHighlight(hi) redir => hl exec 'highlight '.a:hi redir END let hl = substitute(hl, '[\r\n]', '', 'g') let hl = substitute(hl, 'xxx', '', '') return hl endfunction