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