为什么更改颜色方案后状态行缺少颜色?

Why statuslines missing color after change colorscheme?

我的vimrc贴在最下面
statusline相关的插件我没用过
此文件可以正常运行。
但是当我通过命令行更改 colorscheme 时,比如“:colorscheme evening”
状态行缺少颜色。
资源 vimrc 可以修复错误,如 ":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

不是错误而是功能。任何 Vim “colorscheme” 只是一个 Vim 脚本文件,在 99,99% 的情况下,它以命令

开头
hi clear

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

所以你应该

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

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

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