В vim, FIXME и TODO выделены, но я не могу получить FIXME: и TODO: (обратите внимание на двоеточие после ключевого слова), чтобы выделить? Что мне следует включить в мой .vimrc, чтобы это произошло?
В vim, как я могу выделить TODO: и FIXME:?
Ответ 1
Ну, вы уже нашли проблему, но вот почему.
Существует три основных типа синтаксического соответствия: ключевые слова, совпадения и регионы. Ключевые слова - это фиксированные строки, обычно используемые для ключевых слов основного языка (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:
Это зависит от вас, как вы хотите работать в существующих синтаксических/выделенных группах. Если это всего лишь один тип файла, вы можете добавить его в эту группу todo todo (например, cTodo). Если вы хотите его повсюду, вы можете сделать "myTodo", как я предложил, а затем связать его прямо с группой подсветки Todo (hi def link myTodo Todo
).
В качестве альтернативы вы можете оставить только iskeyword
(я бы, вероятно, рекомендовал это), и просто использовать совпадение:
syn match myTodo contained "\<\(TODO\|FIXME\):"
hi def link myTodo Todo
Ответ 2
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.
Ответ 3
Если вы создаете собственную среду, make syntax file (not .vimrc)
-
Файл глобального синтаксиса находится в каталоге vim (например, /usr/share/vim/vim 72/syntax/c.vim)
-
и если вы создадите ~/.vim/syntax/c.vim, то вы можете добавить синтаксис для своего своя. (Внахлест)
Просто добавьте дополнительный синтаксис в этот файл. (путь @Jefromi делает)