加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Vim语法:仅在区域的开头突出显示匹配项

发布时间:2020-12-15 21:32:17 所属栏目:安全 来源:网络整理
导读:我正在为DSL编写 vim语法高亮,其中函数遵循以下格式: # A function with no argumentsfunction# A function with argumentsfunction(arg1,arg2)# A function with textfunction block of normal text# A function with args and textfunction(arg1,arg2) te
我正在为DSL编写 vim语法高亮,其中函数遵循以下格式:

# A function with no arguments
<function>

# A function with arguments
<function(arg1,arg2)>

# A function with text
<function block of normal text>

# A function with args and text
<function(arg1,arg2) text>

# Line breaks are allowed pretty much everywhere.
<function(
        arg1,arg2)
    a block of text>

# As is nesting
<function(<subfunc>) Some text with <another(subfunction) etc.>>

# Backslash escape
<function(single arg with a comma: ",") contained bracket between quotes: "&;">

它是一种文本处理语言(想想类固醇的降价),因此文本块必须是非限制性的.

我在为此编写vim语法文件时遇到了很多麻烦.

我可以

syn region myFunction start='<' end='>' skip='>'
syn region myArgs start='(' end=')' skip=')'

但myFunction不能包含myArgs,因为在下面的示例中错误地突出显示了parens:

<function(arg) some text (with parenthesis) that aren't arguments>

具体来说,我希望功能名称和参数列表仅在区域的紧邻开头突出显示.但是,我不能这样做

syn region myFunction start='<(regex to match name and arg list)' ...

因为,即使匹配名称和arg列表的正则表达式并不可怕,这也会破坏我对语法突出显示嵌套函数的能力.

我想要的是类似于nextgroup的语法区域的开头,但我找不到一个.

这可能吗?我如何在vimscript中执行此操作?

解决方法

定义与前导<重叠的函数名称的包含语法匹配myFunction区域的字符,然后使用nextgroup直接尝试与myArgs匹配,而不是后续出现.

:syn region myFunction start='<' end='>' contains=myFunctionName
:syn match myFunctionName '<i+' contained nextgroup=myArgs
:syn region myArgs start='(' end=')' contained

编辑:这是< ...>上匹配组的变体要素; matchgroup不能用于start元素,因为这会阻止myFunctionName的锚定:

:syn region myFunction start='<' matchgroup=myMarker end='>' contains=myFunctionName
:syn match myFunctionName '<i+' contained nextgroup=myArgs contains=myMarker
:syn match myMarker '<' contained
:syn region myArgs start='(' end=')' contained

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读