Vim - 如何增加视觉块中的每个数字?

J-u*_*ior 11 vim awk vi

我有以下 SQL:

update am.PERMISSIONS set PRM_ORDER = 35 PRM_VISIBLE = b'1' where PRM_ID = 3;
update am.PERMISSIONS set PRM_ORDER = [35] PRM_VISIBLE = b'1' where PRM_ID = 7;
update am.PERMISSIONS set PRM_ORDER = [40] PRM_VISIBLE = b'1' where PRM_ID = 10;
update am.PERMISSIONS set PRM_ORDER = [45] PRM_VISIBLE = b'1' where PRM_ID = 11;
...
Run Code Online (Sandbox Code Playgroud)

用方括号选择可视块,我想将每个数字增加 5。我该怎么做?

Mar*_*rco 16

在视觉上突出显示括号中的文本:

Ctr+ V2jl

将每个数字增加 5:

:norm 5Ctr+ V Ctr+A 说明:

:norm在正常模式下执行整个命令。该Ctr+V是必要的,否则将光标跳回到行的开始。 Ctr+A将一个数字加 1,并进行 5 次。按下冒号后会自动插入可视范围。

编辑: 正如 Stephane 正确指出的那样,前面的代码递增在任何行上找到的第一个数字。这是一个更好的解决方案:

%s/\[\zs\d\+\ze\]/\=(submatch(0)+5)
Run Code Online (Sandbox Code Playgroud)

它将括号内的所有整数加五。的\zs\ze被用于排除从匹配括号并submatch返回匹配数。


Ser*_*ujo 12

你不需要离开视觉模式来增加数字,只需使用 g

5 g Ctrl-a

5 ......... 5 times
g ......... globally
Ctrl-a .... increase numbers
Run Code Online (Sandbox Code Playgroud)

实际上,我在vimgolf挑战中学会了这个技巧。

  • 这只会改变我每行的第一个数字 (2认同)
  • 添加 g 只是增加添加到每个连续行的第一个数字的数量(例如,将 1 添加到第 1 行,添加 2 到第 2 行等),而不是在一行上增加多个数字 (2认同)