Исключая шаблон для подсветки синтаксиса vim - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь настроить подсветку синтаксиса реструктурированного текста в vim.Я пробовал несколько регулярных выражений vim, чтобы выделить два приведенных ниже примера, но я не могу.Если я использую функцию поиска / выделения, все приведенные ниже регулярные выражения выполняют свою работу, но для выделения (синхронизация) это не работает.Может быть, мне нужно изменить syn match на что-то другое?

Это текстовый пример, который я смотрю в первом файле:

.. item:: This is the title I want to highlight

    there is some text here which I do not care

.. item-matrix:: This is the title I want to highlight
    :source: XX
    :target: YY

Регулярные выражения, соответствующие тексту:

[.+].*[:+] \zs.*
\(.. .*:: \)\zs.*

При переводе в совпадение синхронизация не работает (.vim):

syn match rstHeading /[.+].*[:+] \zs.*/

Я знаю, что я близок, потому что приведенный выше пример соответствует

..:: This is highlighted as rstHeading

1 Ответ

0 голосов
/ 11 декабря 2018

При интеграции с существующим синтаксическим сценарием (здесь: $VIMRUNTIME/syntax/rst.vim) необходимо учитывать существующие синтаксические группы.:syn list показывает все активные группы, но это проще, когда вы устанавливаете SyntaxAttr.vim - Показывает синтаксическую подсветку атрибутов символа под курсором плагин.(Я поддерживаю расширенную вилку .)

В заголовках вашего примера я вижу, что часть .. item:: соответствует rstExplicitMarkup, а остальная часть (то, что вы хотите выделить)на rstExDirective.

Предполагая, что вы хотите интегрировать (и не полностью переопределить) их, вам нужно, чтобы ваша синтаксическая группа содержала , содержащую внутри последнего.Это можно сделать с помощью containedin=rstExDirective.

Еще одна ловушка заключается в том, что \zs ограничивает выделение, но внутренне все равно соответствует всему тексту.В сочетании с подсветкой синтаксиса это означает, что существующий rstExplicitMarkup предотвращает совпадение вашего шаблона.Если вместо этого вы используете положительный взгляд сзади (:help /\@<=), он будет работать:

syn match rstHeading /\%([.+].*[:+] \)\@<=.*/ containedin=rstExDirective

Конечно, чтобы увидеть любое выделение, вы такженеобходимо определить или связать группу выделения с новой группой синтаксиса:

hi link rstHeading Title
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...