使用 Perl RegEx 的 ViM 语法文件 Syn 匹配

使用 Perl RegEx 的 ViM 语法文件 Syn 匹配

我想知道是否可以在 .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 个空格中的空格,如果您愿意,可以在此处查看

https://regex101.com/r/oBCjY4/1

答案1

以下匹配应该可以满足您的要求:

syn match noneIndentError /^\( \{4\}\)*\zs \{,3\}/

使用\zs,您可以从匹配中排除它之前的模式,因此这是编写零宽度环视的更简单方法(它类似于\K在 Perl 中)。然后最多匹配 3 个空格。

以下是它如何匹配不同的行:

      foo #
   bar
     
    
        baz

  1. 6 个空格后跟文本
  2. 3 个空格后跟文本
  3. 5 个空格
  4. 4 个空格
  5. 8 个空格后跟文本

相关内容