vim 구문 영역: 문자열을 시작/끝 패턴으로 사용하는 방법은 무엇입니까?

vim 구문 영역: 문자열을 시작/끝 패턴으로 사용하는 방법은 무엇입니까?

내 문법 파일 중 하나에 다음과 같은 내용을 추가하고 싶습니다.

let s:mask1="some chars here"
let s:mask2="and some chars here"

syntax region MyOwnRegionName start=s:mask1 end=s:mask2

s:mask1(아이디어는 여러 지역 정의에 변수를 사용하는 것입니다.)

하지만 그건 작동하지 않습니다. Vim은 다음 오류를 보고합니다:

E402: Garbage after pattern: s:mask1 end=s:mask2
E475: Invalid argument: bmlRecsOps start=s:mask1 end=s:mask2

나는 이 문제를 해결했습니다.

execute 'syntax region MyOwnRegionName start=/'.s:mask1.'/ end=/'.s:mask2.'/'

그러나 나는 그것이 왜, 어떻게 작동하는지 잘 이해하지 못합니다. 이것이 올바른 접근 방식인지 잘 모르겠습니다. 명령이 포함된 문자열을 준비하세요. 여기에 뭔가 문제가 있습니다. 아니면 그럴까요?

답변1

Vim의 평가 규칙은 일반적인 프로그래밍 언어의 평가 규칙과 다릅니다. 최대이전 명령변수를 허용하지 않지만 리터럴 값을 기대합니다. 이렇게 하면 명령을 대화식으로 실행하는 것이 더 편리해지며 문자열 참조가 필요하지 않습니다.

Vimscript에서는 올바르게 발견했듯이 :execute. 모든 매개변수를 평가한 다음 결과 문자열을 Ex 명령으로 실행합니다. 문자열 연결이 너무 다루기 힘든 경우 printf()변수 내용을 명령에 넣는 방법을 사용할 수도 있습니다 .

관련 정보