我正在尝试在 Vim 语法文件中编写一些匹配规则以突出显示缩进项目符号。我的问题是语法突出显示使用背景颜色,因此我想仅匹配项目符号字符而不是前面的空格。
我怎么说“仅当前面有 ^\s\{0,1} 时才匹配\d.、+、- 和 *(但不匹配空格)”
使用以下匹配规则,
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
我得到以下结果:
有没有办法在 Vim 正则表达式中说“如果前面有,但不包括”?
最佳答案
除了 Alex 提到的环视之外,Vim 模式还具有“匹配开始”和“匹配结束”的概念,分别用 \zs
和 \ze
表示> 分别。 Vim 仅当整个模式存在时才会匹配,但会排除 \zs
之前和\或 \ze
之后的所有内容(您不必同时指定两者)匹配。
因此,在您的情况下,您可以在空白模式之后和项目符号/数字模式之前添加 \zs
。例如:/^\s*\zs\d*\./
关于regex - 在 Vim 中突出显示缩进项目符号的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3481740/