vim帮助示例给出了以下语法语句行:
:syntax region String start=+"+ skip=+\\"+ end=+"+
这里的+符号是引用的替代吗?我在模式的帮助页面中找不到这个参考。
+
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+/+//+。回到您的问题,如果模式包含大量双引号,我们可以使用模式中未使用的另一个字符作为分隔符(例如+),否则需要对模式中的每个双引号进行转义。
:h pattern.txt
:h :match
:match MyGroup /TODO/
//
:h syntax.txt
:h :syn-pattern
:syntax region String start=+"+ end=+"+ skip=+\\"+
:s
:h :s
:h pattern-delimiter
a
b
:s/a/b/
:s+a+b+
/
:s/\//\/\//
:s+\/+\/\/+
:s+/+//+
tv6aics12#
您问题中的示例命令并非没有上下文,而是作为其上方段落的说明提供的:在语法命令中,模式必须用两个相同的字符括起来。这与“:s”命令类似。最常用的是双引号。但如果模式包含双引号,则可以使用模式中未使用的另一个字符。
2条答案
按热度按时间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+/+//+
。回到您的问题,如果模式包含大量双引号,我们可以使用模式中未使用的另一个字符作为分隔符(例如
+
),否则需要对模式中的每个双引号进行转义。tv6aics12#
您问题中的示例命令并非没有上下文,而是作为其上方段落的说明提供的:
在语法命令中,模式必须用两个相同的字符括起来。这与“:s”命令类似。最常用的是双引号。但如果模式包含双引号,则可以使用模式中未使用的另一个字符。