モードが変わるたびにvimステータスラインの色を変えようとして、vimエクスペリエンスを改善しようとしました。
私はこれを試してみました:(見つかった ここ )
"Automatically change the statusline color depending on mode
function! ChangeStatuslineColor()
if (mode() =~# '\v(n|no)')
exe 'hi! StatusLine ctermfg=008'
elseif (mode() =~# '\v(v|V)' || g:currentmode[mode()] ==# 'V·Block' || get(g:currentmode, mode(), '') ==# 't')
exe 'hi! StatusLine ctermfg=005'
elseif (mode() ==# 'i')
exe 'hi! StatusLine ctermfg=004'
else
exe 'hi! StatusLine ctermfg=006'
endif
return ''
endfunction
...そして含める:
set statusline+=%{ChangeStatuslineColor()}
ただし、問題があります。insert
モードに切り替えてからEsc
を押してnormal
モードに戻っても、色は元に戻りません。手動で別のモードに入った場合にのみ、色が元に戻ります。
StatusLine
ハイライトグループを動的に変更することは間違ったアプローチです。これはcolorschemeのプリセットを上書きし、機能していないようです(_:redraw[status]
_を追加すると役立つかもしれませんが、実装がさらに醜くなります)。
Vimでは、ステータスラインに_%#HLname#
_記号を使用してカスタムハイライトグループを(複数でも)指定できます。詳細については、_:help 'statusline'
_を参照してください。 _'statusline'
_値を動的に変更するか(これにより、ステータスラインごとに異なる色を使用することもできます)、値自体を再評価する%!MyStatusLine()
アプローチを使用できます。