Vim 如何部分地;链接“;突出显示组?

Vim 如何部分地;链接“;突出显示组?,vim,syntax-highlighting,vim-syntax-highlighting,Vim,Syntax Highlighting,Vim Syntax Highlighting,我正试图在我的上执行此操作。vimrc: hi link SyntasticErrorLine SignColumn hi link SyntasticErrorSign SignColumn hi SyntasticErrorSign guifg=red ctermfg=red 我想要的是使SyntasticErrorSign突出显示组具有与SignColumn相同的背景,但具有自定义的前景色 Vim docs说: -一旦对链接的组使用“:highlight”命令,链接将被删除 所以,我这样

我正试图在我的
上执行此操作。vimrc

hi link SyntasticErrorLine SignColumn
hi link SyntasticErrorSign SignColumn
hi SyntasticErrorSign guifg=red ctermfg=red
我想要的是使
SyntasticErrorSign
突出显示组具有与
SignColumn
相同的背景,但具有自定义的前景色

Vim docs说:

-一旦对链接的组使用“:highlight”命令,链接将被删除

所以,我这样做是行不通的,有没有办法做到这一点呢?

如果你想从其他组中“窃取”一些hl属性值,你不必链接,你只需要获得自己使用的值

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

exec 'hi SyntasticErrorSign guifg=red ctermfg=red ' . (has("gui_running")? 'guibg=':'ctermbg=') . synIDattr(hlID('SignColumn'),'bg')
该行将
SyntasticErrorSign
组的
fg(gui和cterm)
设置为
red
,并使用与组
SignColumn
相同的bg颜色,具体取决于您在
gvim
vim
。我想这应该是你要找的

对于这些函数,您只需
:h xxx()
即可获得详细信息。

很好,但是
synIDattr
似乎存在问题。如果不传递
mode
参数,它将无法在GUI模式(gvim)下返回属性。这是我从中学到的

我已经用以下方法解决了我的问题:

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')

这正是您想要的:

hi SyntasticErrorSign guifg=red ctermfg=red
hi! link SyntasticErrorSign SignColumn

强制链接,即使您已经在突出显示组上设置了属性。

嗨,真的,差不多了,但是在gvim中,它不起作用,只有在终端中。在gvim
synIDattr(hlID('SignColumn'),'bg')
中,没有为
guibg
返回值,它是空的。任何提示?当从
执行时,
gvim
似乎有问题。vimrc
,从命令行执行表达式返回背景…@chico抱歉,我没有对它进行测试。我想如果没有给出
模式
,就会返回当前模式的attr值。这就是为什么我要运行
gui\u
check。