我正在尝试在Vim语法文件中编写一些匹配规则来突出显示缩进的项目符号。我的问题是语法高亮使用背景颜色,所以我想匹配仅子弹字符而不是前面的空格。
我怎么说“匹配\ d。,+, - 和*只有在前面有^ \ s \ {0,1}(但不匹配空格)”/ p>
使用以下匹配规则
syn match notesBullet /^\s*\*/
hi def link notesBullet String
syn match notesNumber /^\s*\d*\./
hi def link notesNumber String
syn match notesMinus /^\s*\-/
hi def link notesMinus Todo
syn match notesPlus /^\s*+/
hi def link notesPlus Plus
我得到以下结果:
http://a.imageshack.us/img155/933/screenshot20100813at100.png
在Vim正则表达式中是否有某种方式可以说“如果先于,但不包括”?
答案 0 :(得分:3)
除了Alex提到的外观之外,Vim模式还具有“匹配开始”和“匹配结束”的概念,分别由\zs
和\ze
表示。 Vim只会在整个模式出现时匹配,但会排除\zs
之前的所有内容和\或\ze
之后的所有内容(您不必同时指定两者)。
因此,在您的情况下,您可以在空白模式之后和项目符号/数字模式之前添加\zs
。例如:/^\s*\zs\d*\./
答案 1 :(得分:2)
有没有办法说“如果先前 通过“在Vim正则表达式?
是的,它被称为“零宽度”匹配,\@<=
(它在Perl和Python的RE子语言中被称为“后视”)。有关所有详细信息,请参阅here。