使用`p`粘贴笨拙的块与下面的线混合

时间:2018-01-06 11:09:28

标签: vim copy paste

如果我用 Ctrl + V Shift + $ 复制3行,然后转到另一个窗口并用 p 粘贴,这些线条混合在一起。

如何将拉出的块作为新行粘贴,以便旧行移到下面而不是粘贴到粘贴的那些?

3 个答案:

答案 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]yygcp等内置粘贴命令的替代方法,这些命令强制使用某种模式(此时此主题还有几种变体,例如粘贴逗号或查询字符)

有了它,您可以使用glp / glp在当前行之前/之前粘贴,无论您如何抽取文本。

答案 2 :(得分:0)

谢谢,我还发现Ctrl+v会按照我的要求删除多行,然后Ctrl+yyCtrl+Y,然后p按预期工作。