如何在Vim的注释中不突出显示(使用matchadd()突出显示)模式

如何在Vim的注释中不突出显示(使用matchadd()突出显示)模式,vim,verilog,Vim,Verilog,例如,我希望:之前或之后的任何字符(空格除外)都高亮显示。为此,我使用: 突出显示操作空间ctermbg=darkblue ctermfg=white guibg=#F59292 :au bufwenter*.v,*.sv让w:m1=matchadd('OpSpace','[^][:]\\\\\\\;[:][^]',-1) 这将突出以下几点: reg[3:0]var 它的问题是,它也突出了评论。例如: //小丑喜欢: o:部分被突出显示,这是我不想要的(它在一个注释行中,使用//)注释) 如有任

例如,我希望:之前或之后的任何字符(空格除外)都高亮显示。为此,我使用:

突出显示操作空间ctermbg=darkblue ctermfg=white guibg=#F59292

:au bufwenter*.v,*.sv让w:m1=matchadd('OpSpace','[^][:]\\\\\\\;[:][^]',-1)

这将突出以下几点:

reg[3:0]var

它的问题是,它也突出了评论。例如:

//小丑喜欢:

o:部分被突出显示,这是我不想要的(它在一个注释行中,使用//)注释)

如有任何建议,我们将不胜感激

提前感谢。

您有两个选择:

使用包含的语法突出显示 您可以扩展文件类型的默认语法规则,而不是使用独立于语法突出显示机制的
matchadd()
。在语法突出显示中,下级匹配必须明确包含在上级组中。为了避免在注释中匹配,只需不在那里添加包含。这里的缺点是,您正在与另一种语法集成,并且查找要添加包含的所有组可能并不简单

优化regexp 如果这只是
/
-风格的注释,则可以向模式中添加负面查找(请参见
:help/\@):

:au BufWinEnter *.v,*.sv let w:m1=matchadd('OpSpace', '\%(//.*\)\@<![^ ][:]\|[:][^ ]', -1)
:au bufwanter*.v,*.sv让w:m1=matchadd('OpSpace','\%(//.\\)\@/
在行中