Mengapa sorotan khusus di vimrc saya dihapus atau diatur ulang ke default?

10

Saya ingin menyorot (bagian dari) status saya dengan %1*, misalnya:

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

Namun, ini selalu muncul sebagai "kosong" (warna terminal default):

masukkan deskripsi gambar di sini

Jika saya mengetik :highlight User1, ini menunjukkan User1 xxx cleared, dan jika saya mengetik :highlight User1 ctermbg=0 ctermfg=10 cterm=bolddi jendela perintah, sepertinya berhasil.

Bagaimana saya bisa memasukkan ini ke .vimrcfile saya ?

File vimrc lengkap saya yang saya gunakan untuk pengujian:

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
sumber

Jawaban:

12

Masalahnya adalah bahwa banyak (semua?) Tema warna akan menghapus semua sorotan dengan highlight clearsebelum mengatur warna mereka sendiri. Misalnya dari /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 ...

Ini juga membersihkan User1..9grup (yang tidak masuk akal, IMHO).

Solusinya adalah dengan menempatkan User1..9sorotan khusus di ColorSchemeautocmd. Dari :help ColorScheme:

Setelah memuat skema warna. :colorschemePola dicocokkan dengan nama colorscheme. <afile>dapat digunakan untuk nama file aktual tempat opsi ini disetel, dan <amatch>untuk nama skema warna baru.

Jadi alih-alih menggunakan highlightperintah "telanjang" , gunakan:

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

Jika Anda sering berganti tema warna, Anda bahkan dapat menggunakan:

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

untuk mendapatkan warna yang cocok dengan tema warna tertentu.

Martin Tournoij
sumber