vi editor :: s如何在模式中为数字添加常量

时间:2018-03-07 16:21:38

标签: vi

我有一个文本文件,其中每一行都是这样的:

abcd123efgh[4]
abcd456efgh[5]
abcd789ijkl[6]
abcd101efgh[7]
abcd123efgh[8]

我想使用vi编辑器为[]里面的所有数字添加一个常量。 例如,如果常量为15,我想将上面的行更改为:

abcd123efgh[19]
abcd456efgh[20]
abcd789ijkl[21]
abcd101efgh[22]
abcd123efgh[23]

我找到了

https://stackoverflow.com/questions/10420797/vim-regex-increment-all-numbers-by-1

更改文件中的所有数字,但无法使解决方案仅适用于某些数字 感谢

1 个答案:

答案 0 :(得分:0)

您可以使用ctrl + a(\<C-a>)序列来增加行中找到的下一个数字。

因此,如果您将光标放在[上,则可以键入15,然后按ctrl + a,它会在[]内的数字上加15。

如果你想对你文件的[]中的所有数字的行为使用它,你可以这样做:

:g/\v\[[0-9]+\]/execute "normal f[15\<C-a>"

因此,您使用global来在多行上执行命令。

正则表达式\v\[[0-9]+\]定义了受影响的行。 其中\v是一个代表非常神奇的修饰符(使用真正的正则表达式语法)

然后我们正在搜索[]中的任何数字。

如果我们找到这样的行,将执行以下命令: execute "normal f[15\<C-a>"

execute函数主要用于使ctrl + a与序列\<C-a>成为可能。

normal代表在vim正常模式下执行命令。 f[找到该行中的下一个[符号。 最后,如前所述,我们使用15\<C-a>增加了15次。