Вот ответ: tex.vim делит текст на зоны, в которых синтаксис должен быть явно разрешенным.Ключевым элементом этой команды является:
syn cluster texChapterGroup contains=@texSectioningGroup
. Это говорит vim, что внутри texChapterGroup
допускается синтаксический кластер texSectioningGroup
.Следующее, что нужно сделать, это просто определить этот кластер как обычно.
Другая деталь заключается в том, что регион texSectioningTitle
должен быть contained
, в противном случае он будет соответствовать произвольным парам {}
в LaTeX.
Итак, полное решение выглядит следующим образом:
syn match texSectioningCommand '\\section\>' skipwhite nextgroup=texSectioningTitle contains=@texSectioningGroup
syn region texSectioningTitle start='{' end='}' contained
syn cluster texSectioningGroup contains=texSectioningCommand
syn cluster texChapterGroup contains=@texSectioningGroup
Редактировать Вот почему поведение было непредсказуемым: vim не читает весь файл, чтобы выяснить синтаксис.Таким образом, в достаточно большой главе мой синтаксис раздела будет работать, потому что vim не зашел достаточно далеко, чтобы увидеть, что он находится в зоне главы.