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, 일치에서 앞선 패턴을 제외할 수 있으므로 너비가 0인 둘러보기를 작성하는 더 쉬운 방법입니다(예:\K펄에서). 그런 다음 최대 3개의 공백을 일치시키세요.

다른 줄과 일치하는 방법은 다음과 같습니다.

      foo #
   bar
     
    
        baz

  1. 6개의 공백 뒤에 텍스트가 옵니다.
  2. 3개의 공백 뒤에 텍스트가 옵니다.
  3. 5칸
  4. 4칸
  5. 8개의 공백 뒤에 텍스트가 옵니다.

관련 정보