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

8
假设光标在第N行,我们用yy复制它,然后想将其粘贴到光标下面20行。是否有可能不移动光标就实现这个操作,而不是使用20j、p和20k?尝试过20p,但只会粘贴20个重复的行。我在谷歌上搜索了一下,但没有找到解决方案,我肯定不是唯一需要这个功能的人。
我的需求是:复制(yy)当前行,粘贴到下面20行,向下移动一行(j),复制(yy)当前行,粘贴到下面33行,向下移动一行(j),复制(yy)当前行,粘贴到下面41行,向下移动一行(j),反复执行此操作。

1
你不是还需要输入数字 20 和字母 p 吗?这样你只需要敲击一次键盘。那么 20jp 就可以了,对吧?如果你想回到之前复制的那一行,只需按下 \`` 即可。 - Kent
比20K更好,但我希望有更好的选择。 - user3667089
你真的需要映射吗?比如说按下20<someKey>,那么Vim会在不移动光标的情况下进行粘贴吗? - Kent
@Kent 如果实现这个的唯一方法是创建自定义映射,如果你能把它写成答案,我会接受的。 - user3667089
4个回答

9
您可以使用:co[py]命令:
:[range]co[py] {address}                   :co :copy
     Copy the lines given by [range] to below the line
     given by {address}.

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

我想抽取一行并将其复制到下面的20行。不是整个20行。 - user3667089
如果您没有指定范围,则默认为当前行。因此,这将复制当前行并将其插入到文件中的下20行。 - Bram
我尝试了:co +20,但光标随着复制向下移动,所以我仍然需要手动输入。与传统的`yy 20j p相比,只少按了一个键,所以收益并不显著。但还是感谢分享这个技巧,学到新东西总是好的。 - user3667089
抱歉,你是对的。我重新测试了一下,发现光标确实移动了。 - Bram

8

2
感谢您提供了我5年前问题的正确答案! - user3667089
1
没问题,我实际上是因为上面的Reddit帖子链接到了这个问题才看到它的。我注意到没有人真正回答它,所以想尝试一下。 - Thaddaeus Markle

5
如果你在寻找关于pP的内置命令/选项,是没有的。你可以按“`”键回到之前的位置。
如果你想创建自定义映射,有很多方法。例如编写一个函数,编写一个自定义命令等。
如果你只想自动执行一些操作,比如对2-20行之间的每一行进行复制并粘贴到当前行以下的5行,你可以考虑使用:g命令。

0
说你想复制第20行并粘贴到第40行,然后执行以下操作
:20t40

如果你想从第20行复制到第25行,并粘贴到第40行,请执行以下操作。
:20,25t40

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接