增量时粘贴和粘贴


14

我正在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中做到这一点,如果可以,我将使用什么命令?

谢谢!

Answers:


11

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

qaVypt)<C-a>q135@a

说明:

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

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

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

<C-a>Ctrla)递增数字。

q 结束宏的录制。

135@a重放存储在寄存器宏一个 135次。

编辑:Peter Rincker有一个较短的命令:

qqYpW<c-a>q135@q

区别是:

它使用寄存器q来存储宏(由于具有相同的键, 因此键入速度qqqa其快),
它仅用一个键击Y(而不是两个Vy)复制行,并且仅用一个键击
将光标移动到第二个数字W(而不是的t))。


4
Vim高尔夫:qqyypW<c-a>q135@q。如果使用Y而不是则更短yy
彼得·林克

10

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

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

2)按 gCtrl-A

我已经在这里录制了一个屏幕

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


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

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

2

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

  • (1, 1),生产线并拉紧它:Vy
  • 粘贴136次: 136p
  • 转到的第二列1并垂直标记:C-vGf)h
  • 运行增量: :II
  • 阅读手册以了解其他好处::help visincr

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.