在vim中,我如何突出显示TODO:和FIXME:?

时间:2010-11-04 13:46:05

标签: vim editor syntax-highlighting

在vim中,FIXME和TODO突出显示,但是我无法获得FIXME:和TODO :(注意关键字后的冒号)要突出显示?我应该在我的.vimrc中添加什么来实现这一目标?

3 个答案:

答案 0 :(得分:52)

嗯,你已经发现了问题,但这就是原因。

语法匹配有三种基本类型:关键字,匹配和区域。关键字是固定字符串,通常用于基本语言关键字(intdouble,...),在您的情况下,也适用于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组(例如cTodo)。如果你想在任何地方使用它,你可以按照我的建议做“myTodo”,然后将它直接链接到Todo突出显示组(hi def link myTodo Todo)。

或者,您可以单独留下iskeyword(我可能会建议这样做),只需使用匹配项:

syn match   myTodo   contained   "\<\(TODO\|FIXME\):"
hi def link myTodo Todo

答案 1 :(得分:11)

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突出显示。

答案 2 :(得分:1)

如果您创建自己的环境,make syntax file (not .vimrc)

  • 全局语法文件位于vim目录(例如 /usr/share/vim/vim72/syntax/c.vim)

  • 如果您使用〜/ .vim / syntax / c.vim,那么您可以为您添加语法 拥有。 (覆盖)

只需在该文件中添加其他语法即可。 (@Jefromi的方式)