submatch 命令在 Vim 中是如何工作的?

时间:2021-05-02 06:27:20

标签: regex vim substitution neovim

我遇到了这个非常漂亮和方便的命令

:.,$/^\d\+/\=submatch(0) + 1/g

它的作用是查找当前行之后的任何行,并检查该行是否以数字开头。如果是,它将用其当前值的增量替换它;然而,我对这实际上是如何发生的感到很困惑。我猜测 \=submatch(0) 部分正在做繁重的工作,但我不知道如何做。在 + 1 之后还有一个 submatch 充当算术,这让我感到惊讶。我原以为它会作为文本插入,而不是对匹配的数字执行算术运算。

1 个答案:

答案 0 :(得分:5)

由于字符串以 \= 开头,因此它被评估为一个表达式。在这种情况下,submatch(0) + 1 被评估为一个函数

submatch

<块引用>

可以使用“submatch(0)”访问整个匹配的文本。文本匹配 第一对带有“()”的submatch(1)。同样为了进一步 () 中的子匹配。

在上面的正则表达式中,整个匹配实际上是数字(每个匹配行的第一个数字)。所以 submatch(0) + 1 会将 1 添加到捕获的匹配项中。

相关问题