如何生成序列号列表,每行一个?


38

从空白开始,如何获取包含以下内容的文档

1
2
3
4
5
6
7
8
9
10
…
100

需要明确的是,我不希望这些数字显示在空白处。我希望它们插入文档本身。

Answers:



18

除了Undo的pure-vim :put =range(1,100)(实际上在顶部留下空白行)之外,您还可以根据其操作系统使用其命令之一。例如,在Unix / Linux机器上:

%!seq 1 100

上面的工作通过将整个(空)缓冲区传递给seq,从而忽略了它的输入,仅输出数字1到100。然后Vim用seq的输出替换整个缓冲区。

当您已经熟悉一些命令行方式来获取所需的内容时,这很有用。


这“掩盖”了一个问题,那就是为什么我认为它比公认的更好。是的,您可以使vim发挥作用,就像您可以使用新月形扳手搅拌汤一样。Vim是一个文本编辑器,而不是一个任意的文本生成器。有很多明显的工具可以做到这一点。
msw 16年

16

作为记录,这绝对不是最短的方法(请参阅@Undo的出色解决方案),但是按击键序列也可以做到这一点:

i1EscqaYpCtrl+aq98@a

让我为您分解一下:

  1. i1<Esc> -插入数字1,然后返回命令模式
  2. qa -开始在寄存器“ a”中记录宏
  3. Y -复制当前行
  4. p -粘贴当前行(光标也将移至粘贴的行)
  5. <Ctrl>a -增加行中的下一个数字,使其为2
  6. q -停止记录宏(是寄存器“ a”)
  7. 98@a -重播寄存器“ a”中的宏98次

4

这是另一种方法,需要较新的Vim(例如7.4.800)

假定缓冲区为空且寄存器a中的值为“ 1”。首先在缓冲区中输入100 1 "a100P

然后从视觉上选择2至100行:2EnterVG

现在按gCtrl+ A

阅读以下位置的帮助 :h v_g_CTRL-A


您必须在答案中添加let @ a =“ 1”。初学者可能会苦于寻找如何在寄存器a中存储值1。
SibiCoder

我在其他类似的解决方案中也看到过gCtrl + A组合键。但是我一直无法找到关于它在做什么/如何工作的解释?您在文档中是否有解释g的参考?谢谢!如果我找到解释,我将其发布。
–codingFoo

1
文档在:h g_CTRL-A
Christian Brabandt

我错过了指向v_g_CTRL-A部分的链接。
–codingFoo

2

我知道这个问题确实很老,但是还有另一种方法可以解决。尝试这个:

99o<esc>:%s/^/\=line('.')<cr>

99o<esc>只会打开100个空白行。然后,我们运行一个替代命令:

:%                  " On every line
  s/                " substitute
    ^/              " the start of the line. (This will always match no matter what)
      \=            " Evaluate:
        line('.')   " The current line.
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.