如何粘贴光标所在的行?

Kit*_*cha 51 vim keyboard-shortcuts copy-paste

该命令p粘贴在光标下方并P粘贴在光标上方.粘贴在光标所在行的命令是什么?

Ran*_*ris 39

这一切都取决于您粘贴的寄存器中的数据类型.如果数据是面向行的数据(yy例如,被拉出),它将被粘贴为光标上方或下方的整行.如果数据是面向字符的(以eg为例y2w),那么它将被粘贴在当前行中光标位置处或之前.

有关:help linewise-register寄存器类型与put命令之间的交互的更多信息,请参阅参考资料.

  • @Kitcha - 阅读有关线性和字符复制的更多信息.如果你以一种特征性的方式将它拉出来,你可以按照你想要的方式复制一条线,例如,`0y $`而不是linewise`yy`.`p`或`P`将粘贴到当前行或不同的行中,具体取决于yank是字符(粘贴到当前行)还是按行(粘贴到上面或下面的行). (7认同)
  • 如果你发现自己通常想要"施放"`p` /`P`,你可能想看看Ingo Karkat的UnconditionalPaste.http://www.vim.org/scripts/script.php?script_id=3355 (5认同)

Mat*_*dge 17

编辑在gvim的菜单列出以下几点:

  • 粘贴= "+gP

  • 放在之前= [p

  • 放在后= ]p

如果您在Windows中运行vim,则可以执行以下操作以使Ctrl+ CCtrl+ V按预期工作:

source $VIMRUNTIME/mswin.vim
behave mswin
Run Code Online (Sandbox Code Playgroud)


rom*_*inl 9

如果要保持当前行不变,则可以粘贴到行的上方或下方.

如果要覆盖当前行,则必须先删除它,这意味着以下行取代它,然后粘贴到新的当前行上方.

有多种方法可以做到:

  • "_ddP

    1. "_dd 删除"黑洞寄存器"中的整个当前行,以下行现在是当前行.

    2. P 将未命名寄存器的内容放在当前行之上.

  • Vp

    1. V将您置于VISUAL LINE模式并在视觉上选择整个当前行

    2. p 将选择替换为未命名寄存器的内容

  • S<C-r>"

    1. S删除当前行的内容并使您进入INSERT模式

    2. <C-r>" 放入未命名的寄存器的内容

最后两个选项有一个有趣的副作用:前一行的内容被放入未命名的寄存器中,这使得无法使用相同的内容进行多个粘贴.

幸运的是,你可以解决这种情况:

  • 第一个解决方案中提到的"黑洞寄存器"很有用......就像一个黑洞.无论你投入什么都消失了,所以你可以继续使用p并且P有一定程度的信心,从粘贴到粘贴,未命名的寄存器仍然是相同的.

  • Vim允许您访问26个字母寄存器,您可以使用它们来保存宏或重复粘贴内容.

    以第二个解决方案为出发点,首先将整行记录到注册表中"a,"ayy然后V"ap在另一行上执行.

但以上所有假设您要粘贴的文本是实际行.Vim区分了"line-wise"和"character-wise":它不会让你在一个字符方式的上下文中粘贴一条线,反之亦然.

Yanking整行都yy保持其行方式或字符明智性,你将无法p在同一行上的两个字符之间.为此,你需要确保你的东西不会被Vim解释为行.例如,假设你是在第一行的第一个字符,并希望抽出ipsum dolor,并把它放在之间的正常位置loremsit:

ipsum dolor
lorem  sit amet
Run Code Online (Sandbox Code Playgroud)

您应该键入"ayee以将您的拉出文本放入寄存器"a,将光标放在需要的位置并键入"aP.


ken*_*orb 5

要在插入模式下粘贴,您只需按Control+ R。然后输入寄存器,例如Shift+ +

要在命令模式下粘贴,您可以按P,但是您必须确保您的行没有换行符(例如 yanked by 0v$hy),否则它会出现在光标上方。

视觉模式相同,请参阅:如何在垂直选择块中粘贴一条线?在 Vim SE