粘贴到vim中的特定行而不移动光标

use*_*089 3 vim

让我们说光标位于N行,我们用yy将它拉出来,我们想要粘贴到光标下面的20行.是否可以在不将光标向下移动的情况下这样做,如20j,p,20k?尝试20p,但它只粘贴了20个重复的行.一些谷歌搜索后我找不到解决方案,我不能是唯一需要这个解决方案的人.

我想要做的是猛拉(yy)当前行,粘贴到下面20行,向下走一行(j),猛拉(yy)当前行,粘贴到33行以下,向下走一行(j),猛拉(yy)当前行,粘贴到下面的41行,向下一行(j),冲洗并重复

Tha*_*kle 8

我不敢相信这个问题已经存在五年了,却没有人真正给出正确的答案......

您正在寻找的是 ex 命令:puthttps://vimhelp.org/change.txt.html#%3Aput)。

从文档中:

:[line]pu[t] [x]
Put the text [from register x] after [line] (default current line).
Run Code Online (Sandbox Code Playgroud)

因此,对于您的示例,步骤将是:

yy
:+20put
Run Code Online (Sandbox Code Playgroud)

另请参阅此 reddit 帖子,我发现它非常有帮助:https://www.reddit.com/r/vim/comments/p7blsn/question_how_to_paste_register_to_a_specific_line/

  • 感谢您为我 5 年前的问题提供正确答案! (3认同)
  • 没问题,我实际上遇到了这个问题,因为上面的 reddit 帖子链接到了它。我注意到没有人真正回答这个问题,并认为这不会有什么坏处。 (2认同)

Bra*_*ram 7

您可以使用以下:co[py]命令:

:[range]co[py] {address}                   :co :copy
     Copy the lines given by [range] to below the line
     given by {address}.
Run Code Online (Sandbox Code Playgroud)

因此,对于给出的示例::co .+20将当前行向下复制 20 行。


Ken*_*ent 5

如果您正在寻找内置命令/选项pP,则没有人.你总是可以按``回到原来的位置.

如果要创建自定义映射,有很多方法.例如写一个函数,编写一个自定义命令等.

如果您只想自动执行某些操作,例如,对于2-20之间的每一行,复制并复制到当前行下面的5行.你可以考虑使用:g命令.