ViM構文ファイルPerl RegExを使用した同期マッチング

ViM構文ファイルPerl RegExを使用した同期マッチング

私は.vim構文ファイルでVim Speakの代わりにPerl RegExを使用できるかどうか疑問に思います。

次の文法ファイルがある場合

/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 MatchingでVim Speakの代わりにPerl RegExを使用できますか?私の正規表現はPerl用に書かれていますが、Vim Speakでは機能しないようです。

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

正規表現は、インデントの4つのスペースに含まれていないスペースのみをテストします。必要に応じてここで確認できます。

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

ベストアンサー1

次の一致が要件を満たしている必要があります。

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

使用\zs、一致から前のパターンを除外できるため、幅がゼロのツアーを作成するより簡単な方法です。\Kパールから)。次に、最大3つのスペースを一致させます。

他の行と一致する方法は次のとおりです。

      foo #
   bar
     
    
        baz

  1. 6つのスペースの後にテキストが続きます。
  2. 3つのスペースの後にテキストが続きます。
  3. 5マス
  4. 4マス
  5. 8つのスペースの後にテキストが続きます。

おすすめ記事