Как автоматически выделить слово в vim? - PullRequest
7 голосов
/ 04 марта 2012

Я хочу выделить определенное слово независимо от типа файла.В моем .vimrc я добавил:

highlight link notes todo
syntax match notes contained "TODO"
syntax match notes contained "NOTE"
syntax match notes contained "!!!"
syntax match notes contained "???"

Примечание: я также попытался syntax match notes "TODO" (без содержимого).

К сожалению, я не могу заставить ни одно из этих ключевых слов бытьвыделено.

РЕДАКТИРОВАТЬ:

Я переместил код в .vim/after/syntax/html.vim, чтобы применить синтаксис.В настоящее время это выглядит так:

syntax match todo contained "\<\(TODO\|NOTE\|!!!\|???\)"

Теперь, когда я набираю :syntax, я получаю Todo xxx match /\<\(TODO\|NOTE\|!!!\|???\)/ contained

Но когда я пытаюсь ввести html-комментарий с TODO в нем (то есть <!-- TODO something -->) подсветка не применяется.

Кроме того, нужно ли мне создавать .vim/after/syntax/file_type.vim для каждого типа файла или я могу как-нибудь применить это вообще?

Ответы [ 3 ]

2 голосов
/ 06 сентября 2012

Возможный обходной путь для глобального выделения - прикрепить ключевые слова к существующей синтаксической группе.В вашем .vimrc:

function! HighlightAnnotations()
  syn keyword vimTodo contained HACK OPTIMIZE REVIEW
  syn keyword rubyTodo contained HACK REVIEW
  syn keyword coffeeTodo contained HACK OPTIMIZE REVIEW
  syn keyword javaScriptCommentTodo contained HACK OPTIMIZE REVIEW
endfunction
autocmd Syntax * call HighlightAnnotations()

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

Чтобы найти существующую группу, откройте файл с интересующим вас расширением и запустите :syn list,Vim предоставит список всех загруженных в данный момент групп синтаксиса.

Надеемся, что это будет приемлемое решение, пока вы не найдете способ сделать это для всех типов файлов.

2 голосов
/ 05 марта 2012

Этот рецепт содержит скрипт и инструкции, чтобы сделать именно то, что вы пытаетесь сделать.

1 голос
/ 19 февраля 2015

Я опоздал к таблице с этим, но я заставил ее работать, добавив эти три строки в мой файл синтаксиса html.vim, который у меня есть в $HOME/vimfiles/after/syntax:

syntax keyword htmlTodo contained todo<br>
syntax match htmlComment /<!--.*/ contains=htmlTodo<br>
hi def link htmlTodo Todo

Я использую только "todo", но список можно расширить, добавив больше ключевых слов, т. Е. Синтаксическое ключевое слово htmlTodo, содержащее обзор теста взлома todo ...

Альтернатива:
Удалить совпадение синтаксиса ..и добавьте следующее:

syntax clear htmlComment
syntax clear htmlCommentPart
syntax region htmlComment                start=+<!+      end=+>+  contains=htmlCommentPart,htmlCommentError,@Spell,htmlTodo 
syntax region htmlCommentPart  contained start=+--+      end=+--\s*+  contains=@htmlPreProc,@Spell,htmlTodo
syntax region htmlComment                  start=+<!DOCTYPE+ keepend end=+>+
...