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ます(IMHOはあまり意味がありません)。

解決策はUser1..9ColorSchemeautocmd にカスタムハイライトを配置することです。から: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

特定のcolorchemesに一致する色を取得します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.