我正在寻找一种方法来编写.vim
语法脚本,以便灵活地匹配区域内的变量名称。
我试图强调的语言部分的语法是这样的:
Function(arg1, arg2, ... argn);
其中args
的格式为infoo=outfoo
。
这种语言忽略了空格。
我到目前为止的代码表示区域parens
syn region parens start='(' end=')'
有没有办法使用syn match 'regex'
命令将正则表达式与=
区域中的parens
字符之前和之后匹配?
问题比简单匹配parens
区域中的所有字词更复杂,因为我需要突出显示infoo
和outfoo
,除非其中一个已经实现了语法突出显示。换句话说,infoo
和outfoo
必须是不同的颜色,具体取决于它们是被声明为变量名还是硬编码到语言中。
我的大部分努力都跟着the Vim wiki guide,我发现很难理解Vim documentation。这是我第一次尝试编写或编辑Vim语法高亮显示
答案 0 :(得分:2)
您正在寻找语法包含;通过contains={group},...
,你告诉Vim解析在区域内的参数(否则,区域匹配会阻止其他语法匹配)。然后,您将使用contained
参数为参数定义语法匹配,以便Vim仅尝试匹配内部(区域)的参数。
这是一个分别解析和 out 部分中的的示例;你可以调整它,甚至定义另一个嵌套的包含:
syn region parens start='(' end=')' contains=inArgument,outArgument
syn match inArgument "\w\+=\@=" contained
syn match outArgument "=\@<=\w\+" contained
注意:语法名称最好遵循其他语法脚本中的{languageName} {SyntaxElementName}样式。