在vim中,FIXME和TODO突出显示,但是我无法获得FIXME:和TODO :(注意关键字后的冒号)要突出显示?我应该在我的.vimrc中添加什么来实现这一目标?
答案 0 :(得分:52)
嗯,你已经发现了问题,但这就是原因。
语法匹配有三种基本类型:关键字,匹配和区域。关键字是固定字符串,通常用于基本语言关键字(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组(例如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的方式)