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

1496
sixtyfootersdude

У меня есть это в моем 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 

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

1

3 ответа на вопрос

3
asdfg

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

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

О, великолепно! Это сладкое решение. Я еще не пробовал, но ясно, что будет. Означает ли это, что vimrc вызывается перед файлом синтаксиса? Есть ли где-нибудь, что я могу узнать, в каком порядке эти файлы называются? sixtyfootersdude 14 лет назад 0
1
user22303

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

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

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

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

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

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

Да, хорошая мысль. sixtyfootersdude 14 лет назад 0
@sixtyfooters: по какой-то причине я не смог добавить комментарий к другому сообщению в этой теме, но команда ': scriptnames' выдает список сценариев, которые были получены (т.е. запущены) в текущем буфере в порядке выполнения. user22303 14 лет назад 1
0
DaveParillo

То, как вы устанавливаете выделение, зависит от того, как вы используете 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 

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

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

highlight JakeKeywords gui=bold cterm=bold term=bold ctermbg=black \ ctermfg=Blue guibg=black guifg=Blue 
Привет Дейв, спасибо за ответ. Я запускаю vim в командной строке (Solaris, Bash). Я не думаю, что это проблема, потому что, как я описал в своем описании, в некоторых типах файлов есть подсветка (то есть те, для которых vim уже не имеет подсветки). sixtyfootersdude 14 лет назад 0
как выглядит результат hitest? DaveParillo 14 лет назад 0

Похожие вопросы