Vim 扩展语法匹配区域
Vim的Javascript语法文件为单行注释定义了区域Vim 扩展语法匹配区域,vim,vim-syntax-highlighting,Vim,Vim Syntax Highlighting,Vim的Javascript语法文件为单行注释定义了区域 syn match javaScriptLineComment "\/\/.*" contains=@Spell,javaScriptCommentTodo 规则javaScriptCommentTodo突出显示某些关键字,但我想用不同的颜色突出显示其他关键字: syn keyword jsCommentMark FEATURE SOURCE NOTE hi jsCommentMark ctermfg=130 guifg
syn match javaScriptLineComment "\/\/.*" contains=@Spell,javaScriptCommentTodo
规则javaScriptCommentTodo
突出显示某些关键字,但我想用不同的颜色突出显示其他关键字:
syn keyword jsCommentMark FEATURE SOURCE NOTE
hi jsCommentMark ctermfg=130 guifg=#af5f00 "rgb=175,95,0
作为快速修复,我在after语法文件中重新定义了原始规则:
syn match javaScriptLineComment "\/\/.*" contains=@Spell,javaScriptCommentTodo,jsCommentMark
是否有更简洁的方法来扩展已定义规则的“contains”值?是的,语法集群是一种内置的抽象,可以实现这一点。要进行演示,请查看$VIMRUNTIME/syntax/sh.vim
:
syn cluster shCommentGroup contains=shTodo,@Spell
syn keyword shTodo contained COMBAK FIXME TODO XXX
syn match shComment "^\s*\zs#.*$" contains=@shCommentGroup
这里,shComment
包含一个语法集群(@shCommentGroup
),其唯一的默认成员是shTodo
有了它,您可以添加其他语法组(例如在~/.vim/after/syntax/sh.vim
中),如下所示:
syn match shMyGroup ...
hi shMyGroup ...
syn cluster shCommentGroup add=shMyGroup
由于这是一个高级概念,大多数语法文件都不使用这种机制。如果您对可维护性和纯度有强烈的感觉,您可以联系Javascript语法的作者,并建议/提交增强。在我看来,您当前的解决方案也很好。您的快速修复行与原始行相同;我想您错过了附加
,jsCommentMark
。另一句话:按照惯例,语法组名称以文件类型开头。因此,您不应该使用jsCommentMark
,而应该使用javascriptCommentMark
(只要原始语法中还没有使用)。不知道为什么原始脚本有javaScript
大写;这也不对。。。