规则表达式突出显示Vim中的缩进子弹

时间:2010-08-14 02:14:57

标签: regex vim

我正在尝试在Vim语法文件中编写一些匹配规则来突出显示缩进的项目符号。我的问题是语法高亮使用背景颜色,所以我想匹配子弹字符而不是前面的空格。

我怎么说“匹配\ d。,+, - 和*只有在前面有^ \ s \ {0,1}(但匹配空格)”

使用以下匹配规则

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正则表达式中是否有某种方式可以说“如果先于,但不包括”?

2 个答案:

答案 0 :(得分:3)

除了Alex提到的外观之外,Vim模式还具有“匹配开始”和“匹配结束”的概念,分别由\zs\ze表示。 Vim只会在整个模式出现时匹配,但会排除\zs之前的所有内容和\或\ze之后的所有内容(您不必同时指定两者)。

因此,在您的情况下,您可以在空白模式之后和项目符号/数字模式之前添加\zs。例如:/^\s*\zs\d*\./

答案 1 :(得分:2)

  

有没有办法说“如果先前   通过“在Vim正则表达式?

是的,它被称为“零宽度”匹配,\@<=(它在Perl和Python的RE子语言中被称为“后视”)。有关所有详细信息,请参阅here