如何拉动具有特定行号的行?


Answers:


59

来自:help :yank

:[range]y[ank] [x]      Yank `[range]` lines [into register x].

因此,要拉动第4行,请输入:

:4yank

请注意,您可以使用插入模式轻松地做到这一点<C-o>。这使您可以执行一个命令,然后返回到插入模式;例如:

<C-o>:4yank

当然,您也可以使用其他范围。一些例子:

  • 第1到3行: :1,3yank
  • 整个缓冲区: :%yank
  • 从当前行到缓冲区末尾: :.,$:yank
  • 当前行和下一条3: :.,+3yank
  • 当前行和上一条3: :-3,.yank
  • 当前行上方的第3行: :-3yank

关于范围最要记住的事情:

  • 采用的形式:line1,line2command
  • A .是当前行(在大多数情况下,您实际上可以省略点;:.,+3yank并且:,+3yank相同)
  • 您可以使用+n和指定相对于当前位置的线-n

请参阅:help [range]以获取更多信息。


6
提及<Co>的加分点,我没有充分利用。
PhilippFrank,2015年

7
另外值得一提的是,你可以缩写:4yank:4y
NewbieOnRails

35

除了Carpetsmoker的答案外,我还应该指出:help :m:help :t

如果要将第4行复制到当前行的正下方,可以执行以下操作:

:4t.

或那样,如果您想将该行复制到当前行的正上方:

:4t-

1

除了获得的ex模式命令之外,您还可以在命令模式下实现该命令,例如:4GY''--表示:转到第4行(4G),取消行(Y),然后返回上一行('')。

您也可以使用跳转标记;对于第二个问题,例如:mm3kY'm--表示:设置标记m(mm),在(3k)上向上移动三行,在()上拉三行Y,然后返回标记m('m)。


1
使用``可能比''更好的建议,因为前者返回同一行和同一列。与“ m”和“ m”同上。
jamessan 2015年

我同意。(因为它们有特殊含义,所以有任何想法如何在Wiki标记中创建原义文本?)-否则,您的评论将很好地修正我的答案,并为读者提供提示。
Janis 2015年

您必须使用多个反引号来分隔内联代码(cf,daringfireball.net/projects/markdown/syntax#code)。我知道它可以在问题/答案中使用,但是我无法在评论中使用它。
jamessan 2015年

1

只需输入

:4y

拉动第4行

它将进入未命名的寄存器。然后,(例如)您可以将p其放在其他位置。您也可以使用[n]p,例如10p将其粘贴10次。

您可以使用以下命令将其放入命名寄存器中,例如“ a”

:4y a

2
将其放入带有“ ay4”的命名寄存器的部分看起来不正确。如果这样做,vim将等待您说“ 4 whats?”。例如,如果您按下Enter键,它将从开始的4行开始当前位置,如果键入/富<回车>它将猛拉TIL的第四以下“foo”的等occurrance
唐舱口

最后一条命令应显示为4G"ayy
romainl

0

你可以做

:10y <Enter> (to copy the line 10)
p (paste line 10 where the cursor is)

设置相对编号也有助于在代码行之间移动。

:set relativenumber

现在,您可以使用以下命令复制光标上方的第五行:

:-5y <Enter>
:p (to paste)
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.