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

时间:2013-11-20 12:05:41

标签: vim verilog

例如,我希望除了空格之前或之后的任何字符都能突出显示。为此,我使用:

highlight OpSpace ctermbg=darkblue ctermfg=white guibg=#F59292

:au BufWinEnter *.v,*.sv let w:m1=matchadd('OpSpace', '[^ ][:]\|[:][^ ]', -1)

这将突出以下内容:

reg [ 3:0 ] var;

问题在于它也突出了评论。例如:

// The Joker likes to:

o:部分会突出显示我不想要的部分(它在注释行中,使用//评论)。

任何建议都表示赞赏。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您有两种选择:

使用包含

的语法高亮显示

您可以扩展文件类型的默认语法规则,而不是使用与语法突出显示机制分开的matchadd()。在语法突出显示中,下级匹配必须在上级组中明确包含。为避免在评论中进行匹配,请不要在其中添加包含。这里的缺点是你正在使用另一种语法进行集成,找到所有要添加包含的组可能并不简单。

优化正则表达式

如果这只是约//种风格的评论,您可以在模式中添加负面的lookbehind (请参阅:help /\@<!):

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

仅当行中没有前面的//时才匹配。