如何部分“链接”突出显示组?

pep*_*ico 7 vim syntax-highlighting vim-syntax-highlighting

我正在尝试在我的.vimrc

hi link SyntasticErrorLine SignColumn
hi link SyntasticErrorSign SignColumn
hi SyntasticErrorSign guifg=red ctermfg=red
Run Code Online (Sandbox Code Playgroud)

我想要的是具有SyntasticErrorSign与背景相同SignColumn但具有自定义前景色的突出显示组。

Vim 文档说:

- 只要你对一个链接的组使用 ":highlight" 命令,链接就会被删除。

所以,我这样做的方式无论如何都行不通,有没有办法实现这一目标?

Ken*_*ent 5

如果您想从其他组“窃取”某些 hl-attribute 值,则不必这样做link,您只需获取自己使用的值即可。

对于您的问题,请尝试将此行添加到您的 .vimrc 文件中。

exec 'hi SyntasticErrorSign guifg=red ctermfg=red ' . (has("gui_running")? 'guibg=':'ctermbg=') . synIDattr(hlID('SignColumn'),'bg')
Run Code Online (Sandbox Code Playgroud)

该生产线集fg(gui and cterm)SyntasticErrorSign组作为red,和用途组相同的背景颜色SignColumn,取决于你是在gvimvim。我认为它应该是你正在寻找的。

对于这些功能,您可以只:h xxx()获取详细信息。


pep*_*ico 5

@Kent 的回答很好,但是synIDattr当不传递mode参数时似乎存在问题,它无法在 GUI 模式 (gvim) 下返回属性。我是从vim-arline 插件源中了解到的。

我已经解决了我的问题:

hi link SyntasticErrorLine SignColumn

exec 'hi SyntasticErrorSign guifg=red ctermfg=red' .
            \' guibg=' . synIDattr(synIDtrans(hlID('SignColumn')), 'bg', 'gui') .
            \' ctermbg=' . synIDattr(synIDtrans(hlID('SignColumn')), 'bg', 'cterm')
Run Code Online (Sandbox Code Playgroud)