Vim 如何粘贴光标所在的行?
命令p粘贴在光标下方,p粘贴在光标上方。在光标所在的行中粘贴什么命令?我不确定是否有。我试图查找文档,并浏览了以下三个文档:Vim 如何粘贴光标所在的行?,vim,keyboard-shortcuts,copy-paste,Vim,Keyboard Shortcuts,Copy Paste,命令p粘贴在光标下方,p粘贴在光标上方。在光标所在的行中粘贴什么命令?我不确定是否有。我试图查找文档,并浏览了以下三个文档: 不幸的是,这三个命令都只有您列出的两个命令。特别是,第三个链接指出,要粘贴的命令是p和p。gvim中的编辑菜单列出了以下内容: 粘贴=“+gP” 放在前面=[p 放在…后面 如果在Windows中运行vim,可以执行以下操作以使Ctrl+C和Ctrl+V按预期工作: source $VIMRUNTIME/mswin.vim behave mswin 这完全
不幸的是,这三个命令都只有您列出的两个命令。特别是,第三个链接指出,
要粘贴的命令是p和p。
gvim中的编辑菜单列出了以下内容:
- 粘贴=“+gP”
- 放在前面=[p
- 放在…后面
source $VIMRUNTIME/mswin.vim
behave mswin
这完全取决于要粘贴的寄存器中的数据类型。如果数据是面向行的数据(例如,用yy拖动),则将其粘贴为光标上方或下方的整行。如果数据是面向字符的(例如,用y2w拖动),则将其粘贴在当前行的光标位置或之前
有关寄存器类型和put命令之间交互的更多信息,请参见
:help linewise register
。如果要保持当前行的原样,可以将其粘贴到行的上方或下方
如果要覆盖当前行,则必须先将其删除,这意味着替换下一行,然后将其粘贴到新的当前行上方
有多种方法可以做到这一点:
“\u ddP
删除“黑洞寄存器”中的整个当前行,下面的行现在是当前行“\u dd
将未命名寄存器的内容置于当前行上方p
Vp
将您置于可视行模式,并以可视方式选择整个当前行V
用未命名寄存器的内容替换所选内容p
S“
删除当前行的内容并将您置于插入模式S
放入未命名寄存器的内容“
- 在第一个解决方案中提到的“黑洞寄存器”起作用,嗯……就像黑洞一样。你放入其中的任何东西都会永远消失,因此你可以继续使用
和p
,并有一定程度的信心,即未命名的寄存器在粘贴到粘贴时仍然是相同的p
- Vim允许您访问26个字母寄存器,您可以使用这些寄存器保存宏或…重复粘贴内容
以第二个解决方案为起点,首先使用
将整行拉入寄存器“ayy
,然后在另一行执行“a
V”ap
yy
拖动一整行将保持其行明智性或字符明智性,您将无法在同一行的两个字符之间执行p
。为此,您需要确保您所拉的不会被Vim解释为行方式。例如,假设您在第一行的第一个字符上,想要将ipsum dolor
猛拉,并将其放在lorem
和sit
之间的正常位置:
ipsum dolor
lorem sit amet
您应该键入
“是”
,将被拖动的文本放入寄存器“a
,将光标放在需要的位置,然后键入“aP
”,您可以使用D从当前光标位置删除到行尾,使用p删除到新光标位置
也就是说,使用^D和p剪切和粘贴整行。我经常需要将寄存器内容“强制转换”到特定(字符/行/块)模式,为此我编写了。它提供了gcp
,glp
,等等,以替代强制使用特定模式的内置粘贴命令(到目前为止,这个主题还有更多的变体,比如用逗号或查询字符连接的粘贴)
有了它,您只需使用
gcp
/gcp
在光标位置之后/之前粘贴,而不管您如何拖动文本。要在插入模式下粘贴,只需按Control+R。然后输入寄存器,例如Shift++
要在命令模式下粘贴,请按p键,但必须确保行中没有新行字符(例如,被0v$hy
拖动),否则它将显示在光标上方
视觉模式也一样,请参见:在Vim SE上(我知道这个线程很旧,只留下这个,希望它可以帮助其他人)
受@wbg关于删除换行符的上述评论的启发,我在映射中添加了以下内容:
nnoremap p:let@“=替换(@“,“\n\+$,”,“,”)p
inoremap:let@“=替换(@“,'\n\+$,'','')pa
当我有一个包含一些SQL(逐行)的文件,并且必须快速插入代码时,这非常有用