我正在Vim中编辑.sql文件:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),


我要删除的是(1, 1),行,并将其粘贴137次。但是,我希望括号中的第二个数字每次都增加。输出看起来像:

INSERT INTO apps_forms (app_id, form_id) VALUES
(1, 1),
(1, 2),
(1, 3),
...
(1, 137),


在Vim中是否可以做到这一点? >谢谢!

#1 楼

将光标放在(1, 1),行上,然后键入:

qaVypt)<C-a>q135@a


说明:

qa开始在寄存器a(您可以选择另一个字母)。

Vyp通过选择整行(V),复制它(y),然后将其粘贴到(p)下,来复制当前行。

t)将光标移动到下一个右括号之前,使其位于第二个数字上。

<C-a>(Ctrl和a)增加数字。

q结束宏的录制。

135@a将存储在寄存器中的宏重放135次。

编辑:Peter Rincker的命令更短:
不同之处在于:

它使用寄存器q来存储宏(因为它是同一个键,所以比qq更快地键入qa),
它只复制一个击键Y(而不是两个Vy),
,它只用一个击键W(而不是t))将光标移动到第二个数字。

评论


Vim高尔夫:qqyypW q135 @ q。如果使用Y而不是yy,则更短。

– Peter Rincker
2015年11月11日下午0:16

#2 楼

最近的Vims已经了解了有关增加可视选定区域以及创建序列的知识。因此,您可以在粘贴行137次之后执行此操作:

1)视觉上从第3行开始对第二个1进行块选择(Ctrl-V)。

2)按gCtrl-A

我已经在此处录制了一个屏幕

免责声明:这需要Vim 7.4.900左右。

评论


在Debian / sid上的Vim 7.4.826中成功测试。

–杜布
2015年11月17日13:38



您的截屏视频已消失,但是这种方法真棒!谢谢。

– david_nash
19年5月10日下午4:06

#3 楼

易于理解/易于记忆/易于适应其他情况的方式:使用VisIncr插件(如果您希望使用与本世纪的软件包管理器实际兼容的版本,而不是使用q4312079 s,您可以从GitHub获取)。使用它:


转到vimball行并拉动:(1, 1),

将其粘贴136次: Vy的第二列并垂直标记:136p

运行增量:1

阅读手册以了解其他优点:C-vGf)h。 />

#4 楼

我会玩g^a

尝试137i0^v137kg^a

评论


欢迎来到Vi和Vim!我已使用markdown格式化了您的答案。如果您编辑以解释如何回答OP的问题,那就更好了。

– D. Ben Knoble♦
19/12/8在13:51