Выборочная подсветка Vim (работает только с определенными типами файлов)

У меня есть это в моем vimrc:

"on will override defaults set.  Enable will allow you to set defaults."
syntax enable

...

"attempting to highlight specific keywords so it is easy to see in code."
"see help e410 for more info."
syn keyword JakeKeywords        Question TODO Answer JAKEHTTPS
highlight JakeKeywords cterm=bold term=bold ctermbg=black ctermfg=Blue

(Примечание: для удобства чтения я закончил все цитаты)

Я попытался вставить JAKEHTTPS ключевое слово в:

  • .java файлы
    • в комментариях
    • в коде
  • .xml файлы
    • в комментариях
    • в коде
  • .jak файлы (пользовательский формат, который я создал, смотрите ниже)

Единственное место, где выделено ключевое слово, находится в .jak,

Вопрос: Почему эти ключевые слова НЕ выделяются в коде Java или XML-коде (и, возможно, в другом коде?

~/.vim/ftdetect/jak.vim:

syn region JakeSubtitle start=+==+ end=+==+
highlight JakeSubtitle ctermbg=black ctermfg=DarkMagenta

syn region JakeTitle start=+===+ end=+===+
highlight JakeTitle ctermbg=black ctermfg=yellow

Примечание: я создал эту тему, но она стала слишком загроможденной, чтобы быть полезной.

3 ответа

Решение

Для стандартных типов файлов теги синтаксиса очищаются перед загрузкой файла синтаксиса filetype.vim.
Вы можете увидеть команду,

 синтаксис ясен 
в начале файлов синтаксиса java.vim и xml.vim
Просто измените строки в vimrc следующим образом:
 au bufread * syn ключевое слово JakeKeywords Вопрос TODO Ответ JAKEHTTPS
au bufread * выделите JakeKeywords cterm= жирный термин = жирный ctermbg= черный ctermfg= синий 
Это должно работать нормально...

Это может быть связано с тем, что ключевые слова содержатся в всеобъемлющей области или области соответствия, которая обрабатывает все выделения. Например, если эти ключевые слова, которые вы хотите выделить, находятся в области комментария, то соответствующий файл синтаксиса устанавливает подсветку, которая применяется ко всей строке комментария и не переопределяется подсветкой ключевых слов в комментарии. Вы уже знаете это, потому что строки комментариев имеют одинаковый цвет, и регулярное выделение ключевых слов не применяется в комментариях.

Чтобы решить вышеуказанную проблему, если она или что-то подобное является вашей проблемой, вам нужно найти java.vim Синтаксический файл и убедитесь, что ключевое слово, которое вы пытаетесь выделить, находится в предложении "Содержит" определений области комментария (и / или всех других общих областей, в которых вы хотите выделить ключевое слово).

Например, одна область комментариев в моем файле синтаксиса для Java (java.vim) это:

syn region  javaComment      start="/\*"  end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell

Вам нужно будет добавить ключевое слово JakeKeyWords к приведенному выше предложению содержит, если вы хотите, чтобы эти ключевые слова были выделены в областях комментариев. Или просто добавьте новые ключевые слова в javaToDo группа, которая уже настроена на отображение со специальным выделением в комментариях.

Не уверен, что вы делаете с JakeSubTitle а также JakeTitle регионы, которые вы пытаетесь определить. Та же проблема с содержанием может относиться к ним. Кроме того, команда "синтаксическое совпадение" - это то, что вы хотите использовать для выделения областей, которые могут быть сопоставлены одним шаблоном, "область" необходима только для более сложных областей (обычно многострочных), которые не могут быть сопоставлены одним шаблон.

То, как вы устанавливаете выделение, зависит от того, как вы используете vim. Я думаю, ты бежишь gvim в графическом интерфейсе

Ваши настройки работают, если вы запускаете vim в терминале, но если вы используете gvim, вам нужно использовать guibg & guifg. Когда я использую настройки, которые у вас есть выше, и запускаю тест подсветки в gvim, :so $VIMRUNTIME/syntax/hitest.vim, JakeKeywords не имеет специального примененного форматирования. Когда я перезапускаю тест, но вызываю vim из командной строки (я сейчас в командной оболочке WindowsXP cmd), ваш пример JakeKeywords отлично работает.

Когда я меняю

highlight JakeKeywords cterm=bold term=bold ctermbg=black ctermfg=Blue

в

highlight JakeKeywords gui=bold guibg=black guifg=Blue

тогда я получаю синий текст на черном фоне в g vim.

Если вы хотите, чтобы это выделение применялось к обоим цветным терминалам (например, терминатор или nautilus) и gvim, вам нужно установить выделение обоих:

highlight JakeKeywords gui=bold cterm=bold term=bold ctermbg=black \
                       ctermfg=Blue guibg=black guifg=Blue
Другие вопросы по тегам