Ну, вы уже нашли проблему, но вот почему.
Существует три основных типа сопоставления синтаксиса: ключевые слова, совпадения и регионы.Ключевые слова - это фиксированные строки, обычно используемые для основных языковых ключевых слов (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