从空白开始,如何获得包含

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


的文件。为了清楚起见,我不希望这些数字显示在页边距中。我希望它们插入文档本身。

#1 楼

使用:putrange()

:put =range(1,100)


为了避免顶部出现空白行(对romainl表示敬意),请使用:0put

:0put =range(1,100)


评论


或在插入模式下, = range(1,100)。

–霍奇克
18年11月14日在18:54

#2 楼

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

%!seq 1 100


上面的方法是将整个(空)缓冲区传递给seq,该缓冲区忽略其输入,仅输出数字1到100。然后Vim用seq的输出替换整个缓冲区。

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

评论


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

– msw
16-10-23在3:11

#3 楼

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

i1EscqaYpCtrl + aq98 @ a

让我为您分解一下:



i1<Esc>-插入数字1,然后返回命令模式

qa -开始在寄存器“ a”中记录宏

Y-复制当前行

p-粘贴当前行(光标也将移至粘贴的行)

<Ctrl>a-将行中的下一个数字递增,使其变为2

q-停止记录宏(已为寄存器“ a”)

98@a-将寄存器“​​ a”中的宏重播98次


#4 楼

这是另一种方法,需要较新的Vim(类似7.4.800)。

假定缓冲区为空,寄存器a中为“ 1”。 ,“ a100P。

,然后从视觉上选择第2行到100:2EnterVG。

现在按gCtrl + A。 br />

评论


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

– SibiCoder
16年5月28日在8:52

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

–codingFoo
16-09-16在17:58

文档位于:h g_CTRL-A

–克里斯蒂安·布拉班特(Christian Brabandt)
16年9月16日在20:03

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

–codingFoo
16年9月16日在20:13

#5 楼

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

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.


评论


谢谢。您的回答帮助我找到了:vim.fandom.com/wiki/Using_an_expression_in_substitute_command,其中提供了更多详细信息。 +1

– PSkocik
20/12/16在11:45