Pourquoi les surbrillances personnalisées dans mon vimrc sont-elles effacées ou réinitialisées par défaut?

10

Je voudrais souligner (une partie de) ma ligne de statut avec %1*, par exemple:

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

Cependant, cela apparaît toujours comme "vide" (les couleurs de terminal par défaut):

entrez la description de l'image ici

Si je tape :highlight User1, cela s'affiche User1 xxx cleared, et si je tape :highlight User1 ctermbg=0 ctermfg=10 cterm=bolddans la fenêtre de commande, cela semble fonctionner.

Comment puis-je mettre cela dans mon .vimrcdossier?

Mon fichier vimrc complet que j'ai utilisé pour les tests:

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
la source

Réponses:

12

Le problème est que de nombreux (tous?) Thèmes de couleurs effaceront tous les reflets highlight clearavant de définir leurs propres couleurs. Par exemple 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 ...

Cela efface également les User1..9groupes (ce qui n'a pas beaucoup de sens, à mon humble avis).

La solution consiste à mettre des User1..9surbrillances personnalisées dans l' ColorSchemeautocmd. De :help ColorScheme:

Après avoir chargé un jeu de couleurs. :colorschemeLe motif est mis en correspondance avec le nom du schéma de couleurs. <afile>peut être utilisé pour le nom du fichier réel où cette option a été définie, et <amatch>pour le nouveau nom du jeu de couleurs.

Ainsi, au lieu d'utiliser une highlightcommande "nue" , utilisez:

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

Si vous changez fréquemment de couleurs, vous pouvez même utiliser:

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

pour obtenir des couleurs assorties à des thèmes de couleurs spécifiques.

Martin Tournoij
la source