¿Por qué los aspectos destacados personalizados en mi vimrc se borran o restablecen a los valores predeterminados?

10

Me gustaría resaltar (parte de) mi línea de estado con %1*, por ejemplo:

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

Sin embargo, esto siempre aparece como "vacío" (los colores de terminal predeterminados):

ingrese la descripción de la imagen aquí

Si escribo :highlight User1, se muestra User1 xxx cleared, y si escribo :highlight User1 ctermbg=0 ctermfg=10 cterm=bolden la ventana de comandos, parece funcionar.

¿Cómo puedo poner esto en mi .vimrcarchivo?

Mi archivo vimrc completo que usé para probar:

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
fuente

Respuestas:

12

El problema es que muchos esquemas de color (¿todos?) Borrarán todos los resaltados highlight clearantes de establecer sus propios colores. Por ejemplo 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 ...

Esto también borra los User1..9grupos (lo cual no tiene mucho sentido, en mi humilde opinión).

La solución es poner User1..9destacados personalizados en el ColorSchemeautocmd. De :help ColorScheme:

Después de cargar un esquema de color. :colorschemeEl patrón coincide con el nombre del esquema de colores. <afile>se puede usar para el nombre del archivo real donde se configuró esta opción y <amatch>para el nuevo nombre del esquema de colores.

Entonces, en lugar de usar un highlightcomando "desnudo" , use:

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

Si cambia frecuentemente los esquemas de colores, incluso puede 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 que los colores coincidan con esquemas de colores específicos.

Martin Tournoij
fuente