我想知道是否可以在 .vim 语法文件中使用 Perl RegEx 而不是 Vim Speak。
如果我有一个语法文件,例如
/usr/share/vim/vim80/syntax/none.vim
" Vim syntax file
" Language: Custom None
" Maintainer: Nobody
if exists("b:current_syntax")
finish
endif
syn match noneIndentError "*Some Vim Speak RegEx*"
hi def link noneIndentError Error
let b:current_syntax = "none"
是否可以在 syn 匹配中使用 Perl RegEx 而不是 Vim Speak?我的正则表达式是为 Perl 编写的,但我似乎无法让它在 Vim Speak 中工作
(?:^)(?: {4})*+( {1,})
正则表达式仅测试未包含在缩进的 4 个空格中的空格,如果您愿意,可以在此处查看
答案1
以下匹配应该可以满足您的要求:
syn match noneIndentError /^\( \{4\}\)*\zs \{,3\}/
使用\zs
,您可以从匹配中排除它之前的模式,因此这是编写零宽度环视的更简单方法(它类似于\K
在 Perl 中)。然后最多匹配 3 个空格。
以下是它如何匹配不同的行:
foo #
bar
baz
- 6 个空格后跟文本
- 3 个空格后跟文本
- 5 个空格
- 4 个空格
- 8 个空格后跟文本