1

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

体育

    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 时,数字12,9803向右移动 1 个字符。

另一种解决方案是创建一个函数,但是每次在输入框中为我必须更改的几个数字添加一个值时,这很复杂。

4

2 回答 2

4

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

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

添加5到每个数字。

AFAIK 无法避免对齐问题,是的,vimscript 可能是适合这项工作的工具。

于 2013-04-11T15:18:59.047 回答
1

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

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

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

既然你提到了对齐,你可能还想看看 godlygeek 的Tabular插件。在vimcasts上画了一个关于使用 tabular 的截屏视频

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

:h :s
:h /\%V
:h sub-replace-expression
:h printf(
于 2013-04-11T20:31:25.940 回答