如何在 Vim 中增加/减少同一行中的所有整数?

问题描述 投票:0回答:3

在 Vim 中,

ctrl+a
是增加一个整数,
ctrl+x
是减少一个整数。

例如,要修改以下代码以将 1, 2, 3 附加到数组中,我可以简单地将

ctrl+a
放在第 3 行中一次,放在第 4 行中两次:

array = []      # line1
array.append(1) # line2
array.append(1) # line3
array.append(1) # line4

然后就会变成:

array = []      # line1
array.append(1) # line2
array.append(2) # line3
array.append(3) # line4

但是当我想在一行中增加多个整数时,这不太方便。比如我要改变:

rank1 = 1
rank1 = 1
rank1 = 1

至:

rank1 = 1
rank2 = 2
rank3 = 3

我的问题是,是否有一种方便的方法可以通过一次按键来增加同一行中的所有整数?

vim
3个回答
6
投票

在 Vim 版本 8 中(第一次提出这个问题时还不存在),您可以使用

g Ctrl+A
每次将数字列增加 1。所以从上面的例子开始:

rank1 = 1
rank1 = 1
rank1 = 1
rank1 = 1
rank1 = 1

移至第二行并按

V
以视觉方式突出显示它。移至最后一行,然后输入
g Ctrl+A
。这会将第一个 1(第二行)增加到 2,后一行的增加到 3,依此类推,得到:

rank1 = 1
rank2 = 1
rank3 = 1
rank4 = 1
rank5 = 1

要增加行末尾的 1 列,您需要选择一个不包含该行前面的数字的块。例如,当光标仍在第二行时,输入

$ Ctrl+V 3j
。然后再次执行
g Ctrl+A
,你会得到:

rank1 = 1
rank2 = 2
rank3 = 3
rank4 = 4
rank5 = 5

这仍然需要分别执行一行上的每个数字,但因为它一次执行所有行,所以总共只需要执行两次,所以应该仍然更快。


2
投票

您首先输入以下两行:

array = []
rank1 = 1

然后将光标置于第 2 行。然后按顺序键入以下内容:

qa
yy
p
shift+v
:
s/\d\+/\=submatch(0)+1/g
q
5@a

这里的“5”可以更改为您想要的重复次数。

好吧,这可行,但会变得更复杂。


2
投票

这个命令应该可以做到:

:s/\d\+/\=submatch(0) + 1/g
© www.soinside.com 2019 - 2024. All rights reserved.