Двойное выделение соответствия для определенных идентификаторов или типов файлов

#vim #syntax-highlighting

#vim #подсветка синтаксиса

Вопрос:

При использовании https://github.com/plasticboy/vim-markdown Я обнаружил, что заголовки markdown являются идентификаторами html. К h2 заголовку markdown привязаны два идентификатора: ['mkdNonListItemBlck', 'htmlH2'] .

Я не уверен, смогу ли я «дважды» сопоставить и определить цвета для этого выделения или мне следует выполнять htmlh2 выделение только в том случае, если файл имеет тип markdown .

Ответ №1:

Если вы хотите адаптировать цвета, вам нужно выяснить, какая синтаксическая группа вызывает выделение. Это проще, когда вы устанавливаете плагин SyntaxAttr.vim — Показывать атрибуты подсветки синтаксиса символа под курсором. Или просто попробуйте, какая :highlight команда изменяет цвета.

Многие синтаксические сценарии являются иерархическими, то есть текст сопоставляется по нескольким синтаксическим правилам. Не вдаваясь глубоко в этот конкретный синтаксис Markdown, я бы предположил, что mkdNonListItemBlock это общий блок, который htmlH2 происходит из исходного синтаксиса HTML.


Перефразируя мой последний вопрос: я хочу выделить только htmlH2 , если я нахожусь в файле markdown. Я надеялся «дважды» сопоставить обе группы, а затем установить предпочтение выделения.

К сожалению, это невозможно. Такие группы выделения, как htmlH2 , являются глобальными; вот почему соглашение добавляет к ним префикс filetype ( html ). Если вы переопределите цвета, это всегда будет применяться как к HTML, так и к Markdown.

Вы могли бы написать :autocmd WinEnter , чтобы переключать их туда-сюда между буферами HTML и Markdown (и никогда не просматривать оба в разбивке одновременно), или скопировать и вставить синтаксический материал из syntax/html.vim в syntax/mkd.vim , а затем переименовать htmlH2 в mkdH2 , но я бы не рекомендовал ни то, ни другое взламывать.

Комментарии:

1. Я надеюсь, что смог ответить на ваш вопрос; ваше последнее предложение для меня не имеет смысла. «Двойного сопоставления» нет, и вы не «выполняете» выделение. Чтобы изменить цвета, вы переопределяете группу выделения соответствующего имени синтаксической группы.

2. Текущие идентификаторы, являющиеся синтаксическими группами, которые выделяют заголовки. ['mkdNonListItemBlck', 'htmlH2'] Перефразируя мой последний вопрос: я хочу выделить, только htmlH2 если я нахожусь в файле markdown. Я надеялся «дважды» сопоставить обе группы, а затем установить предпочтение выделения.

3. А, теперь я понимаю. Хорошая идея, но, к сожалению, это невозможно. Смотрите мою правку.

4. Что, если бы стили применялись только в том случае, markdown если тип файла соответствует функции? Я предполагаю, что это не подходит для файла цветов, но будет ли это приемлемо в другом разделе самого vim-плагина?

5. Это то, на что я намекал; с :autocmd WinEnter * if amp;filetype == 'markdown' | hi htmlH2 ... | else | hi htmlH2 ... | endif . Это работает, если только вы не ожидаете увидеть и HTML, и Markdown одновременно.