Pau*_*gar 44 vim syntax-highlighting editor
在vim中,FIXME和TODO被突出显示,但我无法获得FIXME:和TODO :(注意关键字后的冒号)要突出显示?我应该在我的.vimrc中添加什么来实现这一目标?
Cas*_*bel 54
好吧,你已经发现了问题,但这就是原因.
语法匹配有三种基本类型:关键字,匹配和区域.关键字是固定的字符串,一般用于基本语言的关键字(int,double,...),并在你的情况下,对FIXME和TODO.我的意思是固定字符串; 与使用正则表达式的匹配和区域不同,它们必须是精确的和完整的单词.例如,从C语法:
syn keyword cTodo contained TODO FIXME XXX
Run Code Online (Sandbox Code Playgroud)
它几乎都是内置的语法定义,只是使用不同的组名(cTodo).
iskeyword告诉vim一个给定的字符是否可以成为关键字的一部分.默认情况下,它不包括冒号,因此在查找关键字时,vim将"FIXME:"视为"FIXME",并忽略冒号.如果你使用冒号(set iskeyword+=:),你现在可以定义一个额外的突出显示:
syn keyword myTodo contained TODO: FIXME:
Run Code Online (Sandbox Code Playgroud)
这取决于您希望如何将其用于现有的语法/突出显示组.如果它只适用于一种文件类型,您可以将其添加到该语法的待办事项组(例如cTodo).如果你想在任何地方使用它,你可以按照我的建议做"myTodo",然后将它直接链接到Todo突出显示组(hi def link myTodo Todo).
或者,您可以iskeyword单独留下(我可能会推荐这个),只需使用匹配:
syn match myTodo contained "\<\(TODO\|FIXME\):"
hi def link myTodo Todo
Run Code Online (Sandbox Code Playgroud)
blu*_*yed 14
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
Run Code Online (Sandbox Code Playgroud)
在containedin将其添加到"注释"结尾的所有群体,再加上vimCommentTitle,其中" TODO: foo不至于太突出,否则作为MyTodo.