如何在运行中增加或减少视觉块中的数字?

时间:2013-04-11 15:09:31

标签: regex vim numbers

我经常发现自己在飞行中添加数字到数字列表。

体育课。

    38
    12 x
   215 x
    98 x
    03 x
    23

我想要做的是选择一个可视的数字块(上例中为x) 用另一个数字增加或减少数字。

我尝试使用两个宏来做(我想一个宏是不可能的):
@a增加数量 - > 5 @ a - >用5增加每个数字(@a ='^ Aj')
@x减少数量 - > 5 @ x - >减少每个数字5(@x ='^ Xj')
但...

我不知道 1)如何仅在我的选择中使用宏(不计行)
2)如何在不创建全新宏的情况下即时更改增加/减少数量 3)如何解决此问题:当我向上述数字添加100时,数字129803向右移动1个字符。

另一个解决方案是创建一个函数,但它是i.m.o.复杂添加每次输入框中的值,我必须更改几个数字。

2 个答案:

答案 0 :(得分:4)

选择所有行后,您可以执行以下操作:

:'<,'>norm 5<C-v><C-a> <-- inserts ^A

5添加到每个号码。

无法避免对齐问题AFAIK,是的,vimscript可能是正确的工具。

答案 1 :(得分:1)

增加数字也不错。你有一些选择,但我个人建议使用Tim Pope的speeddating插件。它将提供一个很好的<c-a>视觉模式映射。

但是如果你想要一个快速而又脏的映射,你可以去:

xnoremap <silent> <c-a> :<c-u>exe "'<,'>norm! ".min([col("'<"),col("'>")]).'<bar>'.v:count1."\<c-a>"<cr>

由于您提到了对齐,您可能还想查看godlygeek的Tabular插件。在vimcasts处抽出了screencast on using tabular

如果您决定制作自己的地图/功能/插件,我建议您查看以下内容:

:h :s
:h /\%V
:h sub-replace-expression
:h printf(