В общем, вы можете иметь только один метод подсветки синтаксиса в одном месте. Следовательно, чтобы использовать 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
Не зная точно, что вы хотите понять, я не уверен, что еще сказать - что вы пытаетесь достичь и что вызывает у вас проблемы?