如何粘贴光标所在的行?
命令p粘贴在光标下方,并粘贴到光标上方。 粘贴光标所在行的命令是什么?
这完全取决于您正在粘贴的registry中的数据types。 如果数据是面向行的数据(例如y yed),它将作为整行粘贴在光标上方或下方。 如果数据是面向字符的(例如用y 2 w抽出),那么它将被粘贴在当前行的光标位置或之前。
有关:help linewise-register
types和put命令之间的相互作用的更多信息,请参阅:help linewise-register
。
gvim中的编辑菜单列出了以下内容:
-
Paste = “ + g P
-
放在前面[ p
-
Put After = ] p
如果您在Windows中运行vim,可以按照以下步骤操作,使Ctrl + C和Ctrl + V按预期工作:
source $VIMRUNTIME/mswin.vim behave mswin
如果要保留当前行,请将其粘贴在行的上方或下方。
如果要覆盖当前行,则必须先将其删除,这意味着下面的行代替它, 然后粘贴到新的当前行上方。
有多种方法可以做到这一点:
-
"_ddP
-
"_dd
删除”黑洞寄存器“中的整个当前行,下面的行现在是当前行。 -
P
将无名寄存器的内容放在当前行之上。
-
-
Vp
-
V
将您置于VISUAL LINE模式,并可以直观地select整个当前行 -
p
用未命名的寄存器的内容replaceselect
-
-
S<Cr>"
-
S
删除当前行的内容并将其置于INSERT模式 -
<Cr>"
放入未命名的寄存器的内容
-
最后两个选项有一个有趣的副作用:前一行的内容被放入未命名的寄存器,这使得不可能做多个具有相同内容的粘贴。
幸运的是,你可以解决这个问题:
-
第一个解决scheme中提到的“黑洞寄存器”工作得很好,就像一个黑洞。 不pipe你input什么,它永远消失,所以你可以继续使用
p
和P
,并且有一定程度的自信,从粘贴到粘贴,无名寄存器仍然是一样的。 -
Vim让你可以访问26个字母寄存器,你可以用它来保存macros或者重复粘贴东西。
以第二种解决scheme为出发点,你首先把整行写入registry
"a
"ayy
然后在另一行上做V"ap
。
但是,所有上述假定您要粘贴的文本是一个实际的行。 Vim在“行式”和“字符式”之间做出了区别:它不会让你在一个字符的上下文或其他方式中粘贴一行。
用yy
整个行保持其行或明智的性格,并且你将不能在同一行上的两个字符之间。 为此,您需要确保您所抽取的内容不会被Vim逐行解释。 例如,我们假设你在第一行的第一个字符,并且希望把它放在lorem
和sit
之间的正常位置:
ipsum dolor lorem sit amet
你应该input"ayee
把你的被"ayee
文本注册"a
,把光标放在需要的位置并input"aP
。
您可以使用D从当前光标位置删除到行尾,并将p删除到新的光标位置。
这是剪切和粘贴一整行使用^ D和P。
我需要经常“注入”寄存器内容到一个特定的(字符/行/块)模式,我为它写了UnconditionalPaste插件 。 它提供gcp
, glp
等替代内置的粘贴命令,强制某种模式(现在在这个主题上有更多的变体,比如粘贴逗号或查询字符)。
有了它,你可以使用gcp
/ gcP
在光标位置之前/之后粘贴,而不pipe你如何gcP
文本。
我不确定是否有一个。 我试图find文档,并运行以下三个文件:
- Vim命令备忘单
- Vim编辑器命令
- 掌握VI编辑器
不幸的是,所有三个只有你列出的两个命令。 特别是,第三个链接指出, The commands to paste are p and P...
要以插入模式粘贴,只需按Control + “ 。
要在命令模式下粘贴,你按下P ,但是你必须确保你的线没有新的线条字符(例如被0v$hy
抽出),否则它会出现在光标上方。
对于可视模式,请参阅: 如何在垂直select块中粘贴一行? 在Vim SE
(我知道这个线程是旧的,只是离开这个,希望这可能有助于某人)
受到上面关于删除换行符的@ wbg的评论的启发,我将这些添加到了我的映射中:
nnoremap <leader>p :let @"=substitute(@", '\n\+$', '', '')<CR>p
inoremap <leader>p <esc>:let @"=substitute(@", '\n\+$', '', '')<CR>pa
当我有一个SQL的文件(一行一行),这是非常有用的,我不得不抽入代码。