Dlaczego niestandardowe podświetlenia w moim vimrc są usuwane lub resetowane do domyślnych?

10

Chciałbym podkreślić (część) moją linię statusu %1*, na przykład:

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

Jednak zawsze pojawia się to jako „puste” (domyślne kolory terminala):

wprowadź opis zdjęcia tutaj

Jeśli piszę :highlight User1, pokazuje się User1 xxx cleared, a jeśli piszę :highlight User1 ctermbg=0 ctermfg=10 cterm=boldw oknie poleceń, wydaje się, że działa.

Jak mogę to umieścić w swoim .vimrcpliku?

Mój pełny plik vimrc, którego użyłem do testowania:

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
źródło

Odpowiedzi:

13

Problem polega na tym, że wiele (wszystkich?) Schematów kolorów usunie wszystkie rozjaśnienia highlight clearprzed ustawieniem własnych kolorów. Na przykład z /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 ...

To również usuwa User1..9grupy (co nie ma większego sensu, IMHO).

Rozwiązaniem jest umieszczenie niestandardowych User1..9wyróżnień w ColorSchemeautocmd. Od :help ColorScheme:

Po załadowaniu schematu kolorów. :colorschemeWzór jest dopasowany do nazwy schematu kolorów. <afile>można użyć do nazwy rzeczywistego pliku, w którym ustawiono tę opcję, i <amatch>do nowej nazwy schematu kolorów.

Zamiast więc używać highlightpolecenia „goły” , użyj:

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

Jeśli często zmieniasz kolory, możesz nawet użyć:

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

aby dopasować kolory do określonych schematów kolorów.

Martin Tournoij
źródło