首页 > 解决方案 > 为什么更改颜色方案后状态线缺少颜色?

问题描述

我的 vimrc 贴在底部。
我没有使用任何与状态栏相关的插件。
该文件可以正常工作。
但是当我通过命令行更改颜色方案时,例如 ":colorscheme night"状态行
缺少颜色。
资源 vimrc 可以修复 bug,例如 ":source $HOME_vimrc"。
在 windows10 和 Debian 测试中也发生了同样的错误。

它是一个错误吗?

colorscheme desert
"""""""""""""""""
set laststatus=2
""""""""""""""""""
function! InsertStatuslineColor(mode)
if a:mode == 'i'
  hi statusline guibg=red
elseif a:mode == 'r'
  hi statusline guibg=blue
else
  hi statusline guibg=black
endif
endfunction
au InsertEnter * call InsertStatuslineColor(v:insertmode)
au InsertLeave * hi statusline guibg=orange guifg=white
hi statusline guibg=gray guifg=black
""""""""""""""""""
set statusline=
set statusline +=%4*%n%m%r%h%w%*
set statusline +=%F
set statusline +=%=%1*[%2*%{&ff}:%{&fenc!=''?&fenc:&enc}%1*]
set statusline +=[%2*%Y%1*]
set statusline +=[%2*%03v:%03l%1*/%3*%L(%p%%)%1*]
hi User1 guifg=gray
hi User2 guifg=green
hi User3 guifg=white
hi User4 guifg=red
hi User5 guifg=#a0ee40

标签: vimstatusline

解决方案


不是错误,而是功能。任何 Vim "colorscheme" 只是一个 VimScript 文件,在 99.99% 的情况下,它以命令开头

hi clear

正如您可能猜到的那样,hi clear取消所有先前:hi命令的效果,包括您的:hi UserN ...

所以你应该要么

  1. 每次更改颜色方案时重新定义您的陷阱colorscheme事件;UserN

  2. 或者只使用标准颜色组 ( %#name#),希望这些颜色组在每个颜色方案中都有定义。请参阅:h highlight-groups列表。

当然,在后一种情况下,您的状态行在不同的配色方案下看起来会有所不同。


推荐阅读