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

时间:2013-01-10 07:22:30

标签: vim

在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

我的问题是,通过一次击键增加同一行中的所有整数是一种方便的方法吗?

3 个答案:

答案 0 :(得分:2)

首先输入以下两行:

array = []
rank1 = 1

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

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

这里'5'可以改变你想要的重复次数。

好的,这很有效,但它变得更复杂。

答案 1 :(得分:2)

此命令应该这样做:

:s/\d\+/\=submatch(0) + 1/g

编辑:“+”应该在Vim中转义

答案 2 :(得分:1)

在 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

这仍然涉及单独处理一行上的每个数字,但因为它一次处理所有行,所以总共只涉及执行两次,所以应该仍然更快。