Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 扩展语法匹配区域_Vim_Vim Syntax Highlighting - Fatal编程技术网

Vim 扩展语法匹配区域

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

Vim的Javascript语法文件为单行注释定义了区域

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
大写;这也不对。。。