vim - 根据模式设置状态行颜色变化的最佳方法是什么

vim - 根据模式设置状态行颜色变化的最佳方法是什么

我尝试改善我的 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()重新评估值本身的方法。

相关内容