En general, solo puede tener un método de resaltado de sintaxis en un solo lugar. Por lo tanto, para usar sintaxis tipo C como ejemplo, si define una región para comenzar en un paréntesis de apertura '{' y termina en un paréntesis de cierre '}', el resaltado de sintaxis para esa región será el mismo.
contains=
le permite configurar otros grupos de resaltado de sintaxis que se incluirán dentro de un grupo externo. Para seguir el ejemplo anterior, es posible que desee que se resalte int
, incluso cuando se encuentre en la región exterior. A continuación, puede tener algo como:
syn keyword Keyword int
syn region BraceBlock start='{' end='}' contains=Keyword
Es bastante común que necesite agregar elementos más adelante a la lista de palabras clave contenidas. Hay algunas maneras de hacer esto. En primer lugar, puede usar contains=ALL
o contains=ALLBUT,Error
para permitir que cualquier cosa esté en una región. En segundo lugar, puede utilizar containedin
para empujar algo en el contiene de otra región:
syn region BraceBlock start='{' end='}'
syn keyword Keyword int containedin=BraceBlock
En tercer lugar, se puede definir cualquier cosa que está "contenido" como válidas en este grupo:
syn region BraceBlock start='{' end='}' contains=CONTAINED
syn keyword Keyword int contained
Por último, puede utilizar grupos, que hacen que sea muy fácil decidir dónde va:
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
sin saber exactamente lo que quiere entender, no estoy seguro de qué más decir - lo ¿Estás tratando de lograr y qué te está causando problemas?
Eche un vistazo a los archivos de sintaxis existentes en $ VIMRUNTIME/sintaxis, muchos de ellos usan la palabra clave 'contains'. –