2016-04-05 19 views
2

我在Windows上使用gvim 7.4,乾淨安裝,無插件。任何人都可以解釋,爲什麼這樣:狀態行中反轉的顏色。爲什麼?

highlight statusline guifg=red guibg=green 

將顯示我在紅色背景上的綠色文本。

但是這一個:

highlight statusline gui=NONE guifg=red guibg=green 

會顯示綠色背景上的紅色文字?

(實際的目標是將狀態欄中的文本從粗體更改爲正常,對於此任務,我添加了gui=NONE,然後看到這種奇怪的行爲)。

編輯

(至於我的回答對肯特的評論)

這裏是我的完整_vimrc。有隻有兩個行代碼:

set laststatus=2 
highlight statusline gui=NONE guifg=red guibg=green 

也試過:

  • hi給出的highlight
  • StatusLine同樣的效果給人的statusline
+0

該組稱爲'StatusLine',我不知道Windows中的情況是否正常....':你好StatusLine'的輸出是否也定義了'User1-9'的高亮?你在'statusline'中設置了什麼?顯示你的vimrc – Kent

+0

感謝您的回覆,我編輯了問題 – james

+0

@Carpetsmoker':StatusLine'的輸出是什麼? – Kent

回答

2

這是因爲同樣的效果默認StatusLine是:

:hi StatusLine 
    StatusLine  xxx term=bold,reverse cterm=bold,reverse gui=bold,reverse 

請注意reverse關鍵字ctermgui?這告訴它使用反向視頻。

這也是爲什麼如果您使用gui=NONE(或gui=bold)時顏色是您所期望的。

喜給出的亮點同樣的效果

hi只是highlight的縮寫版本。

4

要檢查hi-group是如何定義的,在vim中使用:hi GroupName,這就是爲什麼我一直要求OP和Carpetsmoker提供它們的cmd輸出。

編譯並安裝vim之後,已經定義了一些默認的HL-Groups。

不時有人詢問有關默認配色方案。並且想要擴展「默認」配色方案。該位置很容易找到,在一個Linux盒子上,例如,它位於/usr/share/vim/vim74/colors/default.vim,不同的分佈可能有不同的路徑。

但是,如果我們打開default.vim,我們會看到一個相當簡單的vim文件。沒有任何HL定義。因爲他們在默認定義的vim​​源代碼中。

關於StatusLine組,它syntax.c文件中定義:

https://github.com/vim/vim/blob/8bc189e81aa98ba4aebb03a9dc9527a210fce816/src/syntax.c#L6784

我們可以看到,reverseStatusLineStatusLineNC組。

要擺脫相反的「功能」,您必須覆蓋guicterm屬性。