例如,我希望除了空格之前或之后的任何字符都能突出显示。为此,我使用:
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:部分会突出显示我不想要的部分(它在注释行中,使用//评论)。
任何建议都表示赞赏。
提前致谢。
答案 0 :(得分:2)
您有两种选择:
您可以扩展文件类型的默认语法规则,而不是使用与语法突出显示机制分开的matchadd()
。在语法突出显示中,下级匹配必须在上级组中明确包含。为避免在评论中进行匹配,请不要在其中添加包含。这里的缺点是你正在使用另一种语法进行集成,找到所有要添加包含的组可能并不简单。
如果这只是约//
种风格的评论,您可以在模式中添加负面的lookbehind (请参阅:help /\@<!
):
:au BufWinEnter *.v,*.sv let w:m1=matchadd('OpSpace', '\%(//.*\)\@<![^ ][:]\|[:][^ ]', -1)
仅当行中没有前面的//
时才匹配。