如果我用 Ctrl + V , Shift + $ 复制3行,然后转到另一个窗口并用 p 粘贴,这些线条混合在一起。
如何将拉出的块作为新行粘贴,以便旧行移到下面而不是粘贴到粘贴的那些?
答案 0 :(得分:2)
在普通模式下按Ctrl-V
时,您将切换到V-BLOCK模式,文本将被复制 blockwise (位置相对固定)。
@PeterRincker在评论部分提供了一个非常简单的方法,您可以将按行设置为:
:put
:[line]pu[t] [x]
将[来自寄存器x]的文本放在[line]之后(默认当前行) 这总是有效| linewise |,因此这个命令可用于将一个被拉出的块作为新行。
以下是我的原始答案,需要更多步骤。
一种不太整洁但实用的粘贴方法 linewise :
:new
创建新缓冲区p
要粘贴Shift+V+G
选择所有文字y
要复制现在你得到了复制文本的正常形式。
答案 1 :(得分:1)
有三种不同的视觉模式;使用<C-V>
,你已经使用 blockwise visual mode ; CP。 :help blockwise-visual
。这种猛拉被存储为一个“浮动”的文本块,插入到现有的周围字符内(如您所发现的)。如果你想复制并粘贴整行,最简单的方法是以行模式拉伸(即使用V
而不是<C-V>
,或者完全跳过可视模式并使用较短的{{1}而不是)。
如果您想要选择部分行,但粘贴为完整的单独行,则不起作用。为此,需要改变寄存器内容的模式。我需要将寄存器内容“转换”为某种(字符/线性/块状)模式,所以我经常为它编写UnconditionalPaste plugin。它提供了[N]yy
,gcp
等内置粘贴命令的替代方法,这些命令强制使用某种模式(此时此主题还有几种变体,例如粘贴逗号或查询字符)
有了它,您可以使用glp
/ glp
在当前行之前/之前粘贴,无论您如何抽取文本。
答案 2 :(得分:0)
谢谢,我还发现Ctrl+v
会按照我的要求删除多行,然后Ctrl+yy
或Ctrl+Y
,然后p
按预期工作。