如何在不移动vim光标的情况下拉动特定行?


39

例如

替代文字

我如何仅将第4行粘贴到第12行,而不必将光标移至第4行?

替代文字


我回答了您的问题,理由是“赞我!” 上线4.在你的第二截屏,它出现在第5行
路易·萨兰

感谢@Louis的回答。我已经更新了屏幕截图。
Lazer

Answers:


51

如果光标已经在第12行,则简单

:4年
P

为我做。


1
真好!有相当于x吗?当我尝试时,:4x我会得到E140: Use ! to write partial buffer。谢谢!
dotancohen 2012年

我不得不说,这是惊人的:D
nXqd 2012年

@dotancohen:4d
2013年

是否有一个很好的方法来实现相对行号?
TrungDQ '16

对于相对数字,只需使用+和-。所以-4是光标上方的四行,而+4是光标下方的四行。
rickythefox

10

怎么样:光标在第11行,您处于“ vi”模式。

:4co.<return>

您显然也可以使用以下模式:

:/^Yank/co.<return>

您可以使用“ mo”(移动)而不是“ co”(复制)来移动行,而不是拉动并放置。


1
甚至更短(t作为复制命令是ed的遗留内容)::4t.
tarleb 2015年


8

尝试:

:4co11

您可以使用参数0粘贴到line 1。这也适用于范围:

:m,n co k

将复制线m通过n以线k+1。另外,缓冲区中的位置并不重要。该move命令m,工作方式类似。


2

应该这样做:

:4,12y
p
k

1
不,那猛拉行的数字4〜12
拉泽

我的意思是复制和粘贴线4条,第12行
拉泽

编辑。这就是你想要的吗?
Umang 2010年

2

其他人已经提到了执行此操作最直接的方法,即:4y,但是我想添加两个有关此操作的注释,这可能会很有用:

第一,如果您键入内容,:help range您将了解有关使用范围应用于Ex样式命令的所有信息。在许多情况下非常有用,并且比使用行号更有用。例如,如果您想在文档开始后对第一行以“ yank”开头(即使它位于第一行),请使用:0/^yank/y。范围最强大的部分是将它们组合起来的能力,例如,:./^Chapter/+50?Pete?d意思是“找到下一行以单词Chapter(从当前行向前搜索)开头,然后向前跳50行,然后向后搜索Pete单词,并删除找到它的第一行。” 除了它实际上不移动光标之外,它只是执行您所告诉的内容。

(我已经使用这种类型的范围规范来自动完成文档创建工作,其中包括在光标下搜索函数名称,然后向前搜索表示“描述”的下一行并将其拖到特定的寄存器等。)

另一个技巧是,您应该了解跳跃。键入:help jump-motions以全面了解它,但是这里的联系方式是,您可以跳至第4行,拉动它,然后用RETURN键返回4Gyy''(或使用反引号代替撇号跳回到您的确切起始位置,而不仅仅是同一行您开始于。)


2

最短:

:1t. 复制当前行下方的第一行。

有范围: :1,4t.复制当前行下方的第1至4行(包括第4行)。

也可以使用相对行号:

:-1t. 复制当前行下方的前一行。

在您的示例中,:4t-1将第四行复制到所需行下方。

注意::t:co[py]命令的同义词。

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.