Я определил пользовательский тип файла с этими строками:
syn region SubSubtitle start=+=+ end=+=+
highlight SubSubtitle ctermbg=black ctermfg=DarkGrey
syn region Subtitle start=+==+ end=+==+
highlight Subtitle ctermbg=black ctermfg=DarkMagenta
syn region Title start=+===+ end=+===+
highlight Title ctermbg=black ctermfg=yellow
syn region MasterTitle start=+====+ end=+====+
highlight MasterTitle cterm=bold term=bold ctermbg=black ctermfg=LightBlue
Я включаю все свои заголовки в этом виде документа как это:
==== Biggest Heading ==== // this will be bold and light blue
===Sub heading === // this will be yellow
bla bla bla // this will be normally formatted
Однако прямо сейчас, когда когда-либо я использую равняние, входят в систему мой код, он думает, что это - заголовок. Есть ли так или иначе, что я могу вынудить соответствие быть только на одной строке?
UPDATE: Мой предыдущий ответ был неверным, вы можете сделать это с регионом, просто сделайте
syn region SubSubtitle start=+=+ end=+=+ oneline
Смотрите :help syn-oneline
и :help syn-arguments
. Полагаю, это показывает, что я не могу запустить vim прямо сейчас, а?
Предыдущий ответ
Согласно моему чтению :help syntax, нет способа сделать это с регионом. Однако, вы можете сделать это с помощью syn-match:
syn match SubSubtitle /=\@<!=[^=]*==\@!/
В /=\@ говорится, что нет
=
непосредственно перед вашим совпадением, а в /=\@! /
говорит, что нет =
сразу после него, поэтому совпадает ровно один =
, куча не=
(не включая новые строки - чтобы включить новые строки, это должно быть \_[^=]
), затем ровно один =
.
Остальное аналогично
syn match Subtitle /=\@<!=\{2}[^=]*=\{2}=\@!/
syn match Title /=\@<!=\{3}[^=]*=\{3}=\@!/
syn match MasterTitle /=\@<!=\{4}[^=]*=\{4}=\@!/
Вы все еще можете делать совпадения внутри syn-matches, так что если у вас есть вложенность, она все равно будет работать.
Например
syn match Todo /\<TODO\>/ containedin=SubSubtitle,Subtitle,Title,MasterTitle contained