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
区域中的所有单词更复杂,因为我需要突出显示 infoo
和 outfoo
,除非其中一个已经是我拥有的东西实现了语法高亮显示。换句话说,infoo
和 outfoo
必须是不同的颜色,这取决于它们是声明为变量名还是硬编码到语言中。
我关注了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 将只尝试匹配内部(区域)。
下面是一个分别解析in和out部分的例子;您可以对其进行调整,甚至还可以定义另一个嵌套包含:
syn region parens start='(' end=')' contains=inArgument,outArgument
syn match inArgument "\w\+=\@=" contained
syn match outArgument "=\@<=\w\+" contained
注意:语法名称应更好地遵循其他语法脚本中的 {languageName}{SyntaxElementName} 样式。
我正在寻找一种方法来编写 .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 for most of my efforts, and I am finding it difficult to understand the Vim documentation。这是我第一次尝试编写或编辑 Vim 语法高亮
您正在寻找语法限制;通过 contains={group},...
,您告诉 Vim 在 区域内解析参数 (否则,区域匹配会阻止那里的其他语法匹配)。然后,您将使用 contained
参数为参数定义语法匹配,这样 Vim 将只尝试匹配内部(区域)。
下面是一个分别解析in和out部分的例子;您可以对其进行调整,甚至还可以定义另一个嵌套包含:
syn region parens start='(' end=')' contains=inArgument,outArgument
syn match inArgument "\w\+=\@=" contained
syn match outArgument "=\@<=\w\+" contained
注意:语法名称应更好地遵循其他语法脚本中的 {languageName}{SyntaxElementName} 样式。