Por que os destaques personalizados no meu vimrc são limpos ou redefinidos para o padrão?

10

Gostaria de destacar (parte da) minha linha de status com %1*, por exemplo:

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

No entanto, isso sempre aparece como "vazio" (as cores padrão do terminal):

insira a descrição da imagem aqui

Se eu digitar :highlight User1, ele mostra User1 xxx cleared, e se eu digitar :highlight User1 ctermbg=0 ctermfg=10 cterm=boldna janela de comando, ele parece funcionar.

Como posso colocar isso no meu .vimrcarquivo?

Meu arquivo vimrc completo que usei para testar:

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

highlight User1 ctermbg=0 ctermfg=10 cterm=bold
Martin Tournoij
fonte

Respostas:

12

O problema é que muitos esquemas de highlight clearcores (todos?) Limparão todos os destaques antes de definir suas próprias cores. Por exemplo, de /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 ...

Isso também limpa os User1..9grupos (o que não faz muito sentido, IMHO).

A solução é colocar User1..9destaques personalizados no ColorSchemeautocmd. De :help ColorScheme:

Depois de carregar um esquema de cores. :colorschemeO padrão é comparado ao nome do esquema de cores. <afile>pode ser usado para o nome do arquivo real em que essa opção foi definida e <amatch>para o novo nome do esquema de cores.

Portanto, em vez de usar um highlightcomando "bare" , use:

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

Se você alterna frequentemente os esquemas de cores, pode até usar:

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

para obter cores correspondentes a esquemas de cores específicos.

Martin Tournoij
fonte