![vim - 根据模式设置状态行颜色变化的最佳方法是什么](https://linux22.com/image/1550789/vim%20-%20%E6%A0%B9%E6%8D%AE%E6%A8%A1%E5%BC%8F%E8%AE%BE%E7%BD%AE%E7%8A%B6%E6%80%81%E8%A1%8C%E9%A2%9C%E8%89%B2%E5%8F%98%E5%8C%96%E7%9A%84%E6%9C%80%E4%BD%B3%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88.png)
我尝试改善我的 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()
重新评估值本身的方法。