Подсветка синтаксиса Vim: сделать регион совпадающим только в одной строке - PullRequest
7 голосов
/ 17 марта 2010

Я определил пользовательский тип файла с этими строками:

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

Однако сейчас, когда я использую знак равенства в своем коде, он думает, что это заголовок. В любом случае, я могу заставить матч быть только на одной линии?

1 Ответ

7 голосов
/ 17 марта 2010

ОБНОВЛЕНИЕ : Мой предыдущий ответ был неправильным, вы можете сделать это с регионом, просто сделайте

syn region SubSubtitle start=+=+ end=+=+ oneline

См. :help syn-oneline и :help syn-arguments. Думаю, это показывает, что я не могу сейчас управлять vim, да?


Предыдущий ответ

Согласно моему прочтению синтаксиса : help , нет способа сделать это с регионом . Тем не менее, вы можете сделать это с помощью syn-match:

syn match SubSubtitle /=\@<!=[^=]*==\@!/

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /=\@<!/ * * * * * * * * * * * *1022* * * * * * * *1022* Не существует =, непосредственно перед вашим матчем, а * 10 24 * говорит, что = нет сразу после, так что это соответствует ровно одному =, группе не- = ( не включая переводы строки - чтобы включить переводы строки, она должна быть \_[^=]), а затем ровно одна =.

Остальные похожи

syn match Subtitle    /=\@<!=\{2}[^=]*=\{2}=\@!/
syn match Title       /=\@<!=\{3}[^=]*=\{3}=\@!/
syn match MasterTitle /=\@<!=\{4}[^=]*=\{4}=\@!/

Вы все еще можете делать совпадения в пределах син-совпадений, поэтому, если у вас есть какое-либо вложение, оно все равно будет работать.

Например

syn match Todo /\<TODO\>/ containedin=SubSubtitle,Subtitle,Title,MasterTitle contained
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...