Итак, я пытаюсь создать синтаксис для парсера Menhir. генератор для OCaml.
На этом языке файл состоит из трех разделов, разделенных %%
(нет, это некрасиво; к сожалению, это унаследовано от древнего ocamlyacc.)
Я пытаюсь создать отдельную синтаксическую область для каждой из этих трех плюс одну для чего-либо после постороннего третьего %%
:
this should be in `menhirDeclarations`
%%
this should be in `menhirRules`
%%
this should be in `menhirOcamlFooter`
%%
this should be in `menhirSeparatorError`
%%
this should still be in the same `menhirSeparatorError`
Сегодня я просматривал документы :h syn-define
и дошел до определения группы, которая соответствует всему в первом объявлении:
syn region menhirDeclarations start=/\%^/ end=/%%/
\ contains=@menhirComments
… но у меня большие проблемы с расширением этого, чтобы правильно соответствовать следующим разделам. Наивный подход не работает для меня, например:
" These break each document into the three sections of a Menhir parser definition:
syn region menhirSeparatorError start=/%%/ end=/%%/
\ contained contains=@menhirComments
syn region menhirOcamlFooter start=/%%/ end=/%%/
\ contained contains=@menhirCommentsnextgroup=menhirSeparatorError
syn region menhirRules start=/%%/ end=/%%/
\ contained contains=@menhirComments nextgroup=menhirOcamlFooter
syn region menhirDeclarations start=/\%^/ end=/%%/
\ contains=@menhirComments nextgroup=menhirRules
Как я могу заставить Vim разделить выделение синтаксиса файла на несколько разделов, как это?