Файлы синтаксиса Vim ... пытаясь понять "содержит" - PullRequest
10 голосов
/ 30 ноября 2009

Я пытаюсь исправить новый файл синтаксиса vim для какого-то пользовательского формата, который я использую. Большую часть этого я могу понять, но ключевое слово «содержит» доставляет мне неприятности.

Есть ли здесь кто-нибудь, кто мог бы дать мне объяснение того, что он делает (я прочитал справку -> не совсем понял) таким образом, как если бы он объяснил это дереву.

1 Ответ

26 голосов
/ 30 ноября 2009

В общем, вы можете иметь только один метод подсветки синтаксиса в одном месте. Следовательно, чтобы использовать C-подобные синтаксисы в качестве примера, если вы определяете регион, который начинается с открывающей скобки '{' и заканчивается на закрывающей скобке '}', подсветка синтаксиса для этой области будет одинаковой.

contains= позволяет настроить другие группы подсветки синтаксиса, которые будут содержаться во внешней группе. Чтобы следовать предыдущему примеру, вы можете захотеть выделить int, даже если он находится во внешней области. Тогда вы можете получить что-то вроде:

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

Довольно часто необходимо добавлять элементы позже в список содержащихся ключевых слов. Есть несколько способов сделать это. Во-первых, вы можете использовать contains=ALL или contains=ALLBUT,Error, чтобы разрешить что-либо находиться в регионе. Во-вторых, вы можете использовать containedin, чтобы вставить что-то в содержимое другого региона:

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

В-третьих, вы можете определить все, что «содержится», как действительное в этой группе:

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

Наконец, вы можете использовать кластеры, которые довольно легко решают, что и где:

syn region BraceBlock start='{' end='}' contains=@MyCluster
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

Не зная точно, что вы хотите понять, я не уверен, что еще сказать - что вы пытаетесь достичь и что вызывает у вас проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...