2015-06-30 76 views
0

我有一個vim的語法彩色文件與像行:Vim的語法高亮「喜高清鏈接」改變顏色的某些映射

hi Function guifg=#536991 guibg=NONE guisp=NONE gui=bold ctermfg=60 ctermbg=NONE cterm=bold   
hi def link Define   Function                                  
hi def link TypeDef  Function 

OK,這些都完全正常工作。但是,如果我想做的事:

hi Type guifg=#008787 guibg=NONE guisp=NONE gui=bold ctermfg=30 ctermbg=NONE cterm=bold 
hi def link Identifier  Type 

或者:

hi Keyword guifg=#BD9800 guibg=NONE guisp=NONE gui=bold ctermfg=136 ctermbg=NONE cterm=bold 
hi def link Statement  Keyword 

突然VIM認爲我瘋了想這些顏色聯繫起來,它稍稍改變他們。例如,「類型」顏色通常是藍綠色,但鏈接到「類型」時,「標識符」爲淺藍色。關鍵字顏色深黃色,但鏈接到關鍵字時語句變爲淡黃色。我沒有在文件中定義「標識符」或「語句」顏色。如果我特別定義每個標記的顏色(這是很多重複),這不會發生。 vim試圖告訴我,我想要鏈接這些顏色是愚蠢的,我誤解了高亮鏈接的功能,我做錯了什麼,或者這是一個錯誤(我懷疑)?

如果vim故意改變這些,是否有辦法讓它停止?

+0

與Vim中的幾乎所有其他設置一樣,使用':verbose'命令前綴查看最後一次更改腳本的腳本。例如。 ':verbose hi標識符'應該告訴你爲標識符類型最後設置了哪些腳本突出顯示。連接突出顯示組應該總是*只是工作*即使他們是「特殊」的名字;和IIUC「標識符」,「聲明」等只是按照慣例特殊。 – Ben

+0

嗯,詳細告訴我「類型」是最後一次在我的color.vim文件中設置的,但告訴我「標識符」最後設置爲(可能是)默認文件:/usr/share/vim/vim74/syntax/syncolor.vim 。對於我嘗試在「默認」顏色之間創建的任何鏈接,例如鏈接評論類型或功能類型,都是如此。它們都與我所鏈接的顏色不同,但「類型」總是正確的。 – limitlessinfinity

回答

5

而不是hi,您可以使用hi!允許鏈接覆蓋任何默認值。

hi Type guifg=#008787 guibg=NONE guisp=NONE gui=bold ctermfg=30 ctermbg=NONE cterm=bold 
hi! link Identifier  Type 

經過廣泛的測試和研究後,似乎基本的默認語法突出顯示組總是會突出顯示定義。例如,評論,函數等總是已突出顯示定義;做hi clear只是簡單地將它們設置爲默認值。 不能鏈接一個組,如果該組已經有突出顯示,除非您使用!標記highlight。這就是爲什麼它適用於TypeDef但不是標識符:標識符具有定義的默認顏色; TypeDef不。

+0

您當然可以將默認顏色鏈接到其他默認顏色!其他事情正在發生。 – Ben

+0

我編輯了我的答案;你的「詳細」建議和進一步研究的結合使我得到了正確的答案。謝謝! – limitlessinfinity

+0

好多了!還要注意,如果已經定義了鏈接或規則,那麼'hi def'將不會執行任何操作,所以您的命令也不會因爲這個原因而無所作爲。但是你說得對,我認爲你需要'!'在這裏。 – Ben