В vim как мне выделить TODO: и FIXME:? - PullRequest
40 голосов
/ 04 ноября 2010

В vim выделены FIXME и TODO, но я не могу выделить FIXME: и TODO: (обратите внимание на двоеточие после ключевого слова) для выделения? Что я должен добавить в мой .vimrc, чтобы это произошло?

Ответы [ 3 ]

52 голосов
/ 04 ноября 2010

Ну, вы уже нашли проблему, но вот почему.

Существует три основных типа сопоставления синтаксиса: ключевые слова, совпадения и регионы.Ключевые слова - это фиксированные строки, обычно используемые для основных языковых ключевых слов (int, double, ...), а также, в вашем случае, для FIXME и TODO.Я действительно имею в виду фиксированные строки;они должны быть точными и целыми словами, в отличие от совпадений и областей, в которых используется регулярное выражение.Например, из синтаксиса C:

syn keyword   cTodo   contained    TODO FIXME XXX

Похоже, что почти во всех определениях встроенного синтаксиса, только с разными именами групп (cTodo).

iskeyword говоритvim может ли данный символ быть частью ключевого слова.По умолчанию он не включает двоеточия, поэтому при поиске ключевых слов vim видит «FIXME:» как «FIXME» и игнорирует двоеточие.Если вы добавите двоеточие (set iskeyword+=:), теперь вы можете определить дополнительный бит выделения:

syn keyword   myTodo   contained   TODO: FIXME:

Вам решать, как вы хотите включить его в существующие группы синтаксиса / выделения.Если это только для одного типа файла, вы можете добавить его в группу задач этого синтаксиса (например, cTodo).Если вы хотите его везде, вы можете сделать «myTodo», как я предложил, а затем связать его прямо с группой выделения Todo (hi def link myTodo Todo).

В качестве альтернативы, вы можете оставить iskeyword в покоевероятно, рекомендую это), и просто используйте совпадение:

syn match   myTodo   contained   "\<\(TODO\|FIXME\):"
hi def link myTodo Todo
11 голосов
/ 31 мая 2015
augroup vimrc_todo
    au!
    au Syntax * syn match MyTodo /\v<(FIXME|NOTE|TODO|OPTIMIZE|XXX):/
          \ containedin=.*Comment,vimCommentTitle
augroup END
hi def link MyTodo Todo

containedin добавит его во все группы, оканчивающиеся на "Комментарий", плюс vimCommentTitle, где " TODO: foo не будет выделено как MyTodo в противном случае.

1 голос
/ 15 ноября 2014

Если вы создаете собственную среду, make syntax file (not .vimrc)

  • Файл глобального синтаксиса находится в каталоге vim (например, /usr/share/vim/vim72/syntax/c.vim)

  • и если вы сделаете ~ / .vim / syntax / c.vim, то вы можете добавить собственный синтаксис.(переопределить)

Просто добавьте дополнительный синтаксис в этот файл.(как это делает @Jefromi)

...