繁体   English   中英

使用正则表达式和非贪婪修饰符的vim语法匹配

[英]vim syntax match using regex and non-greedy modifier

我正在尝试创建一种自定义语法,其结构类似于以下内容

Title String:
{
   ...,
   ...,
   ...
}

Title String2:
{
   ...,
   {
      ...,
      ...,
      ...
   }
   ...,
   ...,
   ...
}

我已经能够编写用于检测{ ... }区域内所有内容的syn matchsyn region语句,但是我无法提出与Title Strings相匹配的语句。

这是我的区域声明:

syn region dbgMessage start="{" end="}" contains=ALLBUT,dbgMessageHeader

我试图添加类似这样的东西来检测标题字符串,我希望它是包括但不包括开头括号在内的所有内容。

syn match dbgMessageHeader "\v.\{-}\ze(\{)"

我的推理:

  • .\\{-}应该占用所有字符并且不要贪婪
  • \\ze(\\{)应该向前寻找一个括号,并在找到一个括号时停止

一个额外的挑战是,如果我使代码处于展平状态,那么该语法可以正确检测所有内容,那就太好了,例如:

Title String: { ..., ..., ... }
Title String2: { ..., { ..., ..., ... } ..., ..., ... }

同样,我当前的实现可以正确地将括号内的所有内容以扁平状态和格式化状态进行匹配,因此,如果我能找出在两种情况下也都可以与标题字符串匹配的内容,那就太好了。

看到我想念的东西吗?

我对Vim的regex语法不是很熟悉,但是此regex可以用于大多数基于Perl的风格(带有s修饰符):

\s([^\s]+):.*?\{

要将其转换为Vim,应该是(我认为):

\s\([^\s]\+\):\_.\{-}{

请注意,我正在使用\\_. 代替. 使它像s修饰符一样起作用。

另请注意,“ 非常魔术模式 ”(无论是哪种模式 )都可能使此混乱。


获得“固定版本”并不容易(如果可能),因为Vim仅支持DFA匹配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM