Подтвердить что ты не робот

В vim, как я могу выделить TODO: и FIXME:?

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

4b9b3361

Ответ 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 делает)