#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 одновременно.