Почему пользовательские выделения в моем vimrc очищаются или сбрасываются по умолчанию?

10

Я хотел бы выделить (частично) мою строку состояния %1*, например:

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

Однако это всегда отображается как «пустой» (цвета терминала по умолчанию):

введите описание изображения здесь

Если я печатаю :highlight User1, это показывает User1 xxx cleared, и если я печатаю :highlight User1 ctermbg=0 ctermfg=10 cterm=boldв командном окне, это, кажется, работает.

Как я могу положить это в моем .vimrcфайле?

Мой полный файл vimrc, который я использовал для тестирования:

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

highlight User1 ctermbg=0 ctermfg=10 cterm=bold
Мартин Турной
источник

Ответы:

12

Проблема в том, что многие (все?) Схемы highlight clearцветов будут очищать все основные моменты, прежде чем устанавливать свои собственные цвета. Например из /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 ...

Это также очищает User1..9группы (что не имеет большого смысла, ИМХО).

Решение состоит в том, чтобы поместить пользовательские User1..9блики в ColorSchemeautocmd. От :help ColorScheme:

После загрузки цветовой схемы. :colorschemeШаблон сопоставляется с именем цвета схемы. <afile>может использоваться для имени фактического файла, в котором была установлена ​​эта опция, и <amatch>для нового имени цвета.

Поэтому вместо использования «голой» highlightкоманды используйте:

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

Если вы часто переключаете схемы цветов, вы можете даже использовать:

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

чтобы получить цвета, соответствующие конкретным цветовым схемам.

Мартин Турной
источник