길이로 구분된 필드를 강조하는 Vim 구문

길이로 구분된 필드를 강조하는 Vim 구문

SVN 덤프 파일에 대한 vim 구문 파일을 작성하려고 합니다. 제가 알 수 없는 부분은 이렇습니다.

Fooprop: Val1
Text-content-length: 20
Barprop: Val2
                                       <- Blank line
abcdefghi
abcdefghi

Next-item-prop: Val3

"'텍스트 내용 길이: N' 뒤에 첫 번째 빈 줄 뒤에 N 문자가 옵니다. 여기서 N은 숫자입니다."라는 구문 규칙을 어떻게 설정합니까?

답변1

다른 정규 표현식에서 텍스트 길이를 인용해야 합니다. Vim은 (Perl과 달리) 정규식 내에서 Vimscript 표현식을 평가하는 것을 허용하지 않으므로 다음을 사용해야 합니다.메타프로그래밍즉, 문법 규칙을 동적으로 구성합니다.

:execute 'syntax match svndumpData /^\n\_.\{' . length . '}/'

\_.이 간단한 스케치는 모든 문자(개행 문자 포함)를 여러 번 일치시키는 데 사용됩니다 \{N}. 줄 바꿈(CR-LF 대 LF)의 길이와 인코딩(문자 수가 이를 나타내는 바이트 수와 반드시 같지는 않습니다!)에 주의해야 합니다.

이는 각 계측이 문법 플러그인을 가져오고 현재 버퍼에 적용되기 때문에 작동합니다.

선택하다

이는 매우 복잡하고 문자 길이 대신 바이트 수(정규식 원자 없음)가 있는 경우 작동하지 않을 수 있으므로 항상 포함된 문자 수를 무시하고 속성의 일부만 정의하는 실용적인 80% 솔루션이 있습니다. 구문 영역을 둘러싸고 있습니다. 모든 경우에 정확하지는 않지만 대부분의 데이터에서는 작동할 것입니다.

관련 정보