在vim模式中,+号用来引用一个模式是什么意思?

7gs2gvoe  于 2023-01-30  发布在  其他
关注(0)|答案(2)|浏览(178)

vim帮助示例给出了以下语法语句行:

:syntax region String   start=+"+  skip=+\\"+  end=+"+

这里的+符号是引用的替代吗?我在模式的帮助页面中找不到这个参考。

zte4gxcn

zte4gxcn1#

关于模式的介绍,见:h pattern.txt .如第10章的例子(:h :match),:match MyGroup /TODO/代替//,任何字符都可以用来标记 * 模式 * 的开始和结束。
和你的问题(:h syntax.txt)一样,这一点在第8章(:h :syn-pattern)中解释过:
在语法命令中,模式必须用两个相同的字符括起来。这类似于“:s”命令。最常用的是双引号。但如果模式包含双引号,则可以使用模式中未使用的另一个字符。示例::syntax region String start=+"+ end=+"+ skip=+\\"+
就像:s命令一样,参见:h :s:h pattern-delimiter,好处和方便之处在于转义符的处理,以:s命令为例,更方便您快速验证。
如果要将a替换为b,可以使用:s/a/b/:s+a+b+。但是如果要将/替换为//,使用分隔符/需要:s/\//\/\//,则可以将分隔符/更改为+:s+\/+\/\/+).实际上,这里我们不再需要转义/,所以最后只有一个简洁的:s+/+//+
回到您的问题,如果模式包含大量双引号,我们可以使用模式中未使用的另一个字符作为分隔符(例如+),否则需要对模式中的每个双引号进行转义。

tv6aics1

tv6aics12#

您问题中的示例命令并非没有上下文,而是作为其上方段落的说明提供的:
在语法命令中,模式必须用两个相同的字符括起来。这与“:s”命令类似。最常用的是双引号。但如果模式包含双引号,则可以使用模式中未使用的另一个字符。

相关问题