我尝试改善我的 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
模式,它不会变回颜色。只有当你手动进入不同的模式时它才会变回颜色。
答案1
动态修改StatusLine
高亮组是错误的方法。这会覆盖你的色彩方案,它似乎不起作用(也许添加:redraw[status]
会有所帮助,但这会使它成为一个更丑陋的实现)。
Vim 允许在状态行中指定自定义高亮组(甚至多个),使用符号%#HLname#
。请参阅:help 'statusline'
详细信息。您可以动态更改值'statusline'
(这也允许不同的状态行使用不同的颜色),也可以使用%!MyStatusLine()
重新评估值本身的方法。