1

Я использую VOoM (вероятно, не нужно много знать о нем, чтобы иметь возможность ответить на мой вопрос, я просто предоставляю эту информацию для контекста), и мне удалось написать себе пару пользовательских правил подсветки синтаксиса для конкретного контента ,

Во-первых, я использую модельную линию, чтобы сообщить vim, что определенный файл является схемой VOoM, у меня есть это в нижней части таких файлов:

/* vim: set syntax=myvoom : */

Во-вторых, у меня есть файл /home/user/.vim/after/syntax/myvoom.vim , вот фрагмент из него:

syn match voomTag "^tags:.*"
hi voomTag ctermfg=White ctermbg=Red guifg=White guibg=Red

В некоторых узлах контура у меня есть такие строки:

tags: foo, bar, baz

Чтобы упростить поиск, приведенное выше правило выделения синтаксиса просто отображает эти строки с пользовательским передним планом / фоном.

Это работает, как и ожидалось, с defaultcheme по умолчанию (:colorscheme в vim возвращает 'default').

Когда я хочу попробовать собственную цветовую схему (например, mustang ) и изменить ее, выполнив :colorscheme mustang, подсветка синтаксиса для моих строк тега теряется.

Я хотел бы понять, почему это происходит.

Кроме того, я хотел бы узнать, как автоматически синхронизировать эти пользовательские правила синтаксиса (которые являются общими, а не специфическими для определенной схемы цветов) при изменении схемы цветов. Нужно ли как-то явно проверять это в файле myvoom.vim? Например, посмотреть, какая цветовая схема активна и имеет собственные правила подсветки синтаксиса для разных цветовых схем, или есть лучший подход?

1 ответ1

3

Причина, по которой это происходит, заключается в команде :highlight clear (см . :help :highlight), которая обычно является одной из первых команд, выполняемых colorscheme. Эта команда сбрасывает все выделения, тем самым устраняя эффект вашей команды custom :highlight .

Чтобы исправить это, вам нужно использовать одно из :autocmd (см help :autocmd), ColorScheme (см . :help ColorScheme), чтобы выполнить вашу команду после загрузки новой схемы цветов . После изменений ваш myvoom.vim должен выглядеть так:

augroup VoomTagHighlight
  autocmd! ColorScheme *
         \ syn match voomTag "^tags:.*" |
         \ hi voomTag ctermfg=White ctermbg=Red guifg=White guibg=Red
augroup END

Смотрите также справку по :augroup адресу :help :augroup .

Если вы хотите иметь различную подсветку в зависимости от текущей схемы цветов, вместо указания собственных цветов используйте команду :highlight link (см . :help :highlight-link). Например, связывание его с группой выделения Error будет выглядеть следующим образом:

augroup VoomTagHighlight
  autocmd! ColorScheme *
         \ syn match voomTag "^tags:.*" |
         \ hi! link voomTag Error
augroup END

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .