vim - 为什么更改颜色方案后状态线缺少颜色?
问题描述
我的 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
解决方案
不是错误,而是功能。任何 Vim "colorscheme" 只是一个 VimScript 文件,在 99.99% 的情况下,它以命令开头
hi clear
正如您可能猜到的那样,hi clear
取消所有先前:hi
命令的效果,包括您的:hi UserN ...
所以你应该要么
每次更改颜色方案时重新定义您的陷阱
colorscheme
事件;UserN
或者只使用标准颜色组 (
%#name#
),希望这些颜色组在每个颜色方案中都有定义。请参阅:h highlight-groups
列表。
当然,在后一种情况下,您的状态行在不同的配色方案下看起来会有所不同。
推荐阅读
- python - 如何解决这个关于读取文件名的python权限错误
- apache-spark - 所有连接表的分区数是否会影响最大执行者?
- hawtio - hawtio 2.x 的自定义插件
- javascript - Jquery动态输入字段中印度货币的输入掩码
- python - django.apps apps.get_model('app_name.model_name') 找不到模型
- python - 有没有办法在 Python 中查询具有已知哈希值的 dict/set
- angular - Angular 反应形式:FormControl -> get() 方法有什么意义吗?
- vb.net - 无需打开 Excel 应用程序即可打印预览 [VB.net]
- javascript - JavaScript:获取编辑/更新输入的数量
- python-3.x - 基于重叠的 IF 语句