如何使用n
替换与特定模式匹配的每个数字n+1
?例如。我想用值+ 1替换括号中的所有数字。
1 2 <3> 4 <5> 6 7 <8> <9> <10> 11 12
应该成为
1 2 <4> 4 <6> 6 7 <9> <10> <11> 11 12
答案 0 :(得分:12)
%s/<\zs\d\+\ze>/\=(submatch(0)+1)/g
作为解释:
%s " replace command
"""""
< " prefix
\zs " start of the match
\d\+ " match numbers
\ze " end of the match
> " suffix
"""""
\= " replace the match part with the following expression
(
submatch(0) " the match part
+1 " add one
)
"""""
g " replace all numbers, not only the first one
编辑: 如果您只想替换特定行,请将光标移到该行上,然后执行
s/<\zs\d\+\ze>/\=(submatch(0)+1)/g
或使用
LINENUMs/<\zs\d\+\ze>/\=(submatch(0)+1)/g
(将LINENUM
替换为实际行号,例如13)
答案 1 :(得分:4)
在vim中,您可以按
递增(递减)光标上或之后的数字NUMBER<ctrl-a> to add NUMBER to the digit
(NUMBER<ctrl-x> to substract NUMBER from the digit)
如果只递增(递减)1,则不需要指定NUMBER。在你的情况下,我会使用一个简单的macro:
qaf<<ctrl-a>q
100<altgr-q>a
这里是宏的简要说明:它使用find(f)commant将光标放在开头&lt;托架。没有必要将光标定位在数字上。按下光标上的数字或光标后的最接近的数字将增加。
如果您想要更短的一系列命令,可以按f<
来定位光标ONCE,使用ctrl-a
增加数字,然后重复按;.
。 ;
命令重复最后一个光标移动,即find命令。 .
命令重复上一次文本更改命令。
请查看此link以获取更多信息,或使用内置文档:h: ctrl-a
。