Regular-Expression

使用 Perl RegEx 的 ViM 語法文件同步匹配

  • May 7, 2021

我想知道是否可以在 .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"

是否可以在同步匹配中使用 Perl RegEx 而不是 Vim Speak 匹配?我的 RegEx 是為 Perl 編寫的,我似乎無法讓它在 Vim Speak 中工作

(?:^)(?: {4})*+( {1,})

RegEx 僅測試縮進的 4 個空格中未包含的空格,如果您願意,可以在此處查看

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

以下比賽應該做你想做的事:

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

使用\zs,您可以從匹配中排除它之前的模式,因此這是編寫零寬度環視的更簡單方法(類似於\KPerl 中的)。然後它最多匹配 3 個空格。

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

     foo #
  bar
    
   
       baz
  1. 6 個空格後跟文本
  2. 3 個空格後跟文本
  3. 5個空格
  4. 4個空格
  5. 8 個空格後跟文本

引用自:https://unix.stackexchange.com/questions/648583