Ran*_*ris 39
这一切都取决于您粘贴的寄存器中的数据类型.如果数据是面向行的数据(yy例如,被拉出),它将被粘贴为光标上方或下方的整行.如果数据是面向字符的(以eg为例y2w),那么它将被粘贴在当前行中光标位置处或之前.
有关:help linewise-register
寄存器类型与put命令之间的交互的更多信息,请参阅参考资料.
Mat*_*dge 17
该编辑在gvim的菜单列出以下几点:
粘贴= "+gP
放在之前= [p
放在后= ]p
如果您在Windows中运行vim,则可以执行以下操作以使Ctrl+ C和Ctrl+ V按预期工作:
source $VIMRUNTIME/mswin.vim
behave mswin
Run Code Online (Sandbox Code Playgroud)
如果要保持当前行不变,则可以粘贴到行的上方或下方.
如果要覆盖当前行,则必须先删除它,这意味着以下行取代它,然后粘贴到新的当前行上方.
有多种方法可以做到:
"_ddP
"_dd
删除"黑洞寄存器"中的整个当前行,以下行现在是当前行.
P
将未命名寄存器的内容放在当前行之上.
Vp
V
将您置于VISUAL LINE模式并在视觉上选择整个当前行
p
将选择替换为未命名寄存器的内容
S<C-r>"
S
删除当前行的内容并使您进入INSERT模式
<C-r>"
放入未命名的寄存器的内容
最后两个选项有一个有趣的副作用:前一行的内容被放入未命名的寄存器中,这使得无法使用相同的内容进行多个粘贴.
幸运的是,你可以解决这种情况:
第一个解决方案中提到的"黑洞寄存器"很有用......就像一个黑洞.无论你投入什么都消失了,所以你可以继续使用p
并且P
有一定程度的信心,从粘贴到粘贴,未命名的寄存器仍然是相同的.
Vim允许您访问26个字母寄存器,您可以使用它们来保存宏或重复粘贴内容.
以第二个解决方案为出发点,首先将整行记录到注册表中"a
,"ayy
然后V"ap
在另一行上执行.
但以上所有假设您要粘贴的文本是实际行.Vim区分了"line-wise"和"character-wise":它不会让你在一个字符方式的上下文中粘贴一条线,反之亦然.
Yanking整行都yy
保持其行方式或字符明智性,你将无法p
在同一行上的两个字符之间.为此,你需要确保你的东西不会被Vim解释为行.例如,假设你是在第一行的第一个字符,并希望抽出ipsum dolor
,并把它放在之间的正常位置lorem
和sit
:
ipsum dolor
lorem sit amet
Run Code Online (Sandbox Code Playgroud)
您应该键入"ayee
以将您的拉出文本放入寄存器"a
,将光标放在需要的位置并键入"aP
.
要在插入模式下粘贴,您只需按Control+ R。然后输入寄存器,例如Shift+ +。
要在命令模式下粘贴,您可以按P,但是您必须确保您的行没有换行符(例如 yanked by 0v$hy
),否则它会出现在光标上方。
视觉模式相同,请参阅:如何在垂直选择块中粘贴一条线?在 Vim SE