我想替换一个文件的所有内容string\d\+
,例如将字符串 10 替换为字符串 20。我尝试使用s/\(string\)\d\+/\1\=submatch(0)+10
我知道的\=
判断\1
是否存在。但是help: submatch
像这样使用。我该如何纠正这个命令或者有另一种方法来实现它。
答案1
:s/\(string\)\d\+/\1\=submatch(0)+10
您已经接近:
- 不能混合使用正常替换 (
\1
) 和:help sub-replace-expression
。一旦您使用后者,全部的替换必须是一个表达式。 - 为了增加数字,需要单独捕获它。
submatch(0)
是整个匹配;你不能简单地添加10
到它。 - 如果你想更换全部出现,您仍然需要添加
/g
标志和:[range]
;否则,只有当前行的第一个匹配项才会增加。
以下是完整捕获的一个变体:
:%substitute/\(string\)\(\d\+\)/\=submatch(1) . (submatch(2) + 10)/g
由于您没有对string
前缀执行任何操作,因此我们可以通过以下方式对其进行断言(但不包括它):help /\zs
;那么我们不需要任何捕获:
:%substitute/string\zs\d\+/\=submatch(0) + 10/g