为什么我的vimrc中的自定义突出显示被清除或重置为默认值?


10

我想用突出显示我的状态行(的一部分)%1*,例如:

set statusline=%1*%f%0*
highlight User1 ctermbg=0 ctermfg=10 cterm=bold

但是,它始终显示为“空”(默认的端子颜色):

在此处输入图片说明

如果键入:highlight User1,则显示User1 xxx cleared,如果:highlight User1 ctermbg=0 ctermfg=10 cterm=bold在命令窗口中键入,它似乎可以正常工作。

如何将其放入.vimrc文件中?

我用于测试的完整vimrc文件:

set nocompatible
set background=light
colorscheme default
set laststatus=2
set statusline=%1*%f%0*

highlight User1 ctermbg=0 ctermfg=10 cterm=bold

Answers:


12

问题在于,许多(全部?)highlight clear配色方案会在设置自己的颜色之前清除所有高光。例如来自/usr/share/vim/vim74/colors/peachpuff.vim

" First remove all existing highlighting.
set background=light
hi clear
if exists("syntax_on")
  syntax reset
endif

let colors_name = "peachpuff"

hi Normal guibg=PeachPuff guifg=Black

hi SpecialKey term=bold ctermfg=4 guifg=Blue
" ... Many more highlights follow ...

也可以清除User1..9组(恕我直言,恕我直言)。

解决方案是将自定义User1..9高亮显示在ColorSchemeautocmd中。来自:help ColorScheme

加载配色方案后。:colorscheme图案与colorscheme名称匹配。<afile>可用于设置此选项的实际文件的名称,以及<amatch>新的colorcheme名称。

因此,不要使用“ bare” highlight命令,而应使用:

autocmd ColorScheme *
        \ highlight User1 ctermbg=0 ctermfg=10 cterm=bold |
        \ highlight User2 ctermbg=0 ctermfg=9 cterm=bold

如果您经常切换颜色方案,甚至可以使用:

autocmd ColorScheme colorscheme_one_name  highlight User1 ctermbg=0 ctermfg=10 cterm=bold
autocmd ColorScheme another_scheme        highlight User1 ctermbg=0 ctermfg=11 cterm=bold

使颜色与特定的配色方案匹配。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.