2009-11-30 4 views
8

사용중인 사용자 지정 형식에 대한 새 vim 구문 파일을 패치하려고합니다. 그것의 대부분은 이해할 수 있지만, 키워드 "포함"은 나를 괴롭히는 것입니다.Vim 구문 파일 ... "contains"를 이해하려고 시도했습니다.

그가 나무에 설명하는 것처럼 그것이하는 일에 대한 설명을 할 수있는 여기있는 사람이 있습니까 (도움을 읽었는지 -> 이해하지 못했습니다).

+0

$ VIMRUNTIME/구문에있는 기존 구문 파일을 살펴보면 많은 것들이'contains' 키워드를 사용합니다. –

답변

21

일반적으로 구문 강조 방법은 한 곳에서만 사용할 수 있습니다. 따라서 C와 유사한 구문을 예로 사용하여 여는 중괄호 '{'에서 시작하여 닫는 중괄호 '}'로 끝나는 영역을 정의하면 해당 영역의 구문 강조 표시가 동일하게됩니다.

contains=을 사용하면 다른 구문 강조 그룹을 외부 그룹에 포함되도록 구성 할 수 있습니다. 앞의 예를 따르려면 int이 외부 영역에 있더라도 강조 표시해야 할 수 있습니다. 그러면 다음과 같은 내용을 가질 수 있습니다.

syn keyword Keyword int 
syn region BraceBlock start='{' end='}' contains=Keyword 

나중에 포함 된 키워드 목록에 항목을 추가해야하는 경우가 일반적입니다. 이 작업에는 몇 가지 방법이 있습니다. 먼저 contains=ALL 또는 contains=ALLBUT,Error을 사용하여 모든 항목을 지역에 허용 할 수 있습니다. 셋째

syn region BraceBlock start='{' end='}' 
syn keyword Keyword int containedin=BraceBlock 

, 당신은이 그룹에 유효한 "포함"되어 아무것도 정의 할 수 있습니다 : 마지막으로

syn region BraceBlock start='{' end='}' contains=CONTAINED 
syn keyword Keyword int contained 

을, 당신을 다른 지역의 포함에 두 번째로, 당신이 뭔가를 밀어 containedin을 사용할 수 있습니다 어디는 아주 쉽게가는 결정할 수 있도록 클러스터 사용할 수 있습니다

syn region BraceBlock start='{' end='}' [email protected] 
syn keyword Keyword int 
syn cluster MyCluster contains=Keyword 
syn keyword Conditional if else 
syn cluster MyCluster add=Conditional 
" Now conditionals and keywords can appear in a BraceBlock 

이해하려는 정확히 모른 채를, 내가 다른 무슨 말을 모르겠어요 - 무엇을 달성하려고 노력하고 있으며 무엇이 문제를 일으키고 있습니까?

+0

그래서, 올바르게 이해하면 규칙 내에서 규칙을 정의하는 방법입니다. 예를 들어 대괄호 사이의 모든 것을 일치시킨 다음 대괄호 안의 선택 항목에서 "무언가"와 일치시키는 또 다른 규칙은 무엇입니까? (나는 심지어 오른쪽의 흔적 위에있다)? – Rook

+0

@ldigas : 좋은 요약입니다. 내부 "somethings"는 외부 그룹 (내부 항목에 위의 세 번째 예와 같이 "포함 된"키워드를 추가하는 경우) 또는 외부 그룹과 다른 곳에서 추가 할 수 있습니다 (추가하지 않으면 "포함 된"키워드). – DrAl

+0

'contain '의 사용법을 설명해주십시오. 세 번째 지점에서,'syn region BraceBlock start = '{'end = '}'는 = CONTAINED'와 그 아래의 줄을 포함하고 있습니다. – Harshiv

관련 문제