Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Vim中增加/减少同一行中的所有整数?_Vim - Fatal编程技术网

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

如何在Vim中增加/减少同一行中的所有整数?,vim,Vim,在Vim中,ctrl+a是增加一个整数,ctrl+x是减少一个整数 例如,要修改以下代码以将1、2、3附加到数组中,我只需在第3行中放置一次ctrl+a,在第4行中放置两次: array = [] # line1 array.append(1) # line2 array.append(1) # line3 array.append(1) # line4 然后它将变成: array = [] # line1 array.append(1) # line2 array.app

在Vim中,
ctrl+a
是增加一个整数,
ctrl+x
是减少一个整数

例如,要修改以下代码以将1、2、3附加到数组中,我只需在第3行中放置一次
ctrl+a
,在第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
致:


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

首先键入以下两行:

array = []
rank1 = 1
然后将光标放在第2行。然后按顺序键入以下内容:

qa
yy
p
shift+v
:
s/\d\+/\=submatch(0)+1/g
q
5@a
这里的“5”可以改变为你想要的重复次数


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

首先键入以下两行:

array = []
rank1 = 1
然后将光标放在第2行。然后按顺序键入以下内容:

qa
yy
p
shift+v
:
s/\d\+/\=submatch(0)+1/g
q
5@a
这里的“5”可以改变为你想要的重复次数


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

这个命令应该可以:

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

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

此命令应执行以下操作:

:s/\d\+/\=submatch(0) + 1/g
编辑:在Vim版本8中,Vim中的“+”应该转义(当第一次提出此问题时,它不存在)。您可以使用
g Ctrl+A
将一列数字每次增加1。从上面的例子开始:

rank1 = 1
rank1 = 1
rank1 = 1
rank1 = 1
rank1 = 1
移动到第二行,然后按
V
以视觉方式突出显示该行。移动到最后一行,然后键入
gctrl+A
。这将第一个1(第二行)增加到2,第二行后面的1增加到3,依此类推,得到:

rank1 = 1
rank2 = 1
rank3 = 1
rank4 = 1
rank5 = 1
然后,要增加行末尾的1列,需要选择一个不包括行前面数字的块。例如,当光标仍在第二行时,键入
$Ctrl+v3j
。然后再次执行
gctrl+A
,您将得到:

rank1 = 1
rank2 = 2
rank3 = 3
rank4 = 4
rank5 = 5
这仍然需要分别在一行上做每一个数字,但因为它一次做所有行,所以总共只需要做两次,所以应该更快。

在Vim版本8中(第一次问这个问题时不存在),您可以使用
g Ctrl+a
将一列数字每次增加1。从上面的例子开始:

rank1 = 1
rank1 = 1
rank1 = 1
rank1 = 1
rank1 = 1
移动到第二行,然后按
V
以视觉方式突出显示该行。移动到最后一行,然后键入
gctrl+A
。这将第一个1(第二行)增加到2,第二行后面的1增加到3,依此类推,得到:

rank1 = 1
rank2 = 1
rank3 = 1
rank4 = 1
rank5 = 1
然后,要增加行末尾的1列,需要选择一个不包括行前面数字的块。例如,当光标仍在第二行时,键入
$Ctrl+v3j
。然后再次执行
gctrl+A
,您将得到:

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

这仍然需要在一行中分别计算每个数字,但因为它一次计算所有行,所以总共只需要计算两次,所以速度应该更快。

这只会增加行中的第一个数字。问题是如何增加行中的所有数字。恐怕这不是我要问的。但还是要感谢你教我这个录音技巧。这只会增加第一行的数字。问题是如何增加行中的所有数字。恐怕这不是我要问的。但还是要感谢你教我这个录音技巧。