Vim 语法:将区域中的正则表达式匹配到关键字之后和之前

Vim Syntax: Matching a regex in a region to after AND before a keyword

我正在寻找一种方法来编写 .vim 语法脚本以灵活地匹配区域内的变量名称。

我要强调的语言部分的语法如下:

Function(arg1, arg2, ... argn);

其中 args 的形式为 infoo=outfoo.

此语言忽略空格。 到目前为止,我的代码表示一个区域 parens

syn region parens start='(' end=')'

是否可以使用 syn match 'regex' 命令将正则表达式匹配到 parens 区域内的 = 字符前后?

这个问题比简单地匹配 parens 区域中的所有单词更复杂,因为我需要突出显示 infoooutfoo,除非其中一个已经是我拥有的东西实现了语法高亮显示。换句话说,infoooutfoo 必须是不同的颜色,这取决于它们是声明为变量名还是硬编码到语言中。

我关注了the Vim wiki guide for most of my efforts, and I am finding it difficult to understand the Vim documentation。这是我第一次尝试编写或编辑 Vim 语法高亮

您正在寻找语法限制;通过 contains={group},...,您告诉 Vim 在 区域内解析参数 (否则,区域匹配会阻止那里的其他语法匹配)。然后,您将使用 contained 参数为参数定义语法匹配,这样 Vim 将只尝试匹配内部(区域)。

下面是一个分别解析inout部分的例子;您可以对其进行调整,甚至还可以定义另一个嵌套包含:

syn region parens start='(' end=')' contains=inArgument,outArgument
syn match inArgument "\w\+=\@=" contained
syn match outArgument "=\@<=\w\+" contained

注意:语法名称应更好地遵循其他语法脚本中的 {languageName}{SyntaxElementName} 样式。