Vim语法突出显示"hi def link"会更改某些映射的颜色

Car*_*hez 0 vim colors

我有一个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
Run Code Online (Sandbox Code Playgroud)

好吧,那些都完美无缺.但如果我想这样做:

hi Type guifg=#008787 guibg=NONE guisp=NONE gui=bold ctermfg=30 ctermbg=NONE cterm=bold
hi def link Identifier     Type
Run Code Online (Sandbox Code Playgroud)

要么:

hi Keyword guifg=#BD9800 guibg=NONE guisp=NONE gui=bold ctermfg=136 ctermbg=NONE cterm=bold
hi def link Statement      Keyword
Run Code Online (Sandbox Code Playgroud)

突然,vim认为我因为想要链接这些颜色而疯狂,它略微改变它们.例如,Type颜色通常是青色,但是当链接到Type时,Identifier是浅蓝色.关键字颜色为深黄色,但链接到关键字时,Statement变为浅黄色.我没有在文件中定义"Identifier"或"Statement"颜色的任何其他内容.如果我专门定义每个令牌的颜色(这是很多重复),这不会发生.vim试图告诉我,我想要链接这些颜色是愚蠢的,我是否误解了高亮连接的功能,我做错了什么,或者这是一个错误(我怀疑)?

如果vim故意改变这些,有没有办法让它停止?

Car*_*hez 6

hi您可以使用hi!以允许链接覆盖任何默认值,而不是.

hi Type guifg=#008787 guibg=NONE guisp=NONE gui=bold ctermfg=30 ctermbg=NONE cterm=bold
hi! link Identifier     Type
Run Code Online (Sandbox Code Playgroud)

经过广泛的测试和研究后,似乎基本的默认语法突出显示组将始终定义突出显示.例如,注释,函数等始终具有突出显示的定义; 这样做hi clear只是将它们设置回默认值.你不能,如果集团已拥有高亮,除非你使用的链接一组!标志highlight.这就是为什么它适用于TypeDef但不适用于标识符:标识符具有定义的默认颜色; TypeDef没有.