Warum werden benutzerdefinierte Markierungen in meinem vimrc gelöscht oder auf die Standardeinstellungen zurückgesetzt?

10

Ich möchte (einen Teil) meiner Statuslinie hervorheben %1*, zum Beispiel mit:

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

Dies wird jedoch immer als "leer" angezeigt (die Standardfarben des Terminals):

Geben Sie hier die Bildbeschreibung ein

Wenn ich tippe :highlight User1, wird es angezeigt User1 xxx cleared, und wenn ich :highlight User1 ctermbg=0 ctermfg=10 cterm=boldim Befehlsfenster tippe, scheint es zu funktionieren.

Wie kann ich das in meine .vimrcDatei aufnehmen?

Meine vollständige vimrc-Datei, die ich zum Testen verwendet habe:

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
quelle

Antworten:

12

Das Problem ist, dass viele (alle?) Farbschemata alle Glanzlichter löschen, highlight clearbevor sie ihre eigenen Farben festlegen . Zum Beispiel von /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 ...

Dies auch löscht die User1..9Gruppen (die nicht viel Sinn machen, IMHO).

Die Lösung besteht darin, benutzerdefinierte User1..9Highlights in das ColorSchemeAutocmd einzufügen. Von :help ColorScheme:

Nach dem Laden eines Farbschemas. :colorschemeDas Muster wird mit dem Namen des Farbschemas abgeglichen. <afile>kann für den Namen der tatsächlichen Datei verwendet werden, in der diese Option festgelegt wurde, und <amatch>für den neuen Farbschemanamen.

Verwenden Sie also anstelle eines "nackten" highlightBefehls:

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

Wenn Sie häufig zwischen Farbschemata wechseln, können Sie sogar Folgendes verwenden:

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

um Farben an bestimmte Farbschemata anzupassen.

Martin Tournoij
quelle