如何在Vim中的另一列文本后粘贴一列文本?

时间:2012-02-02 21:51:59

标签: vim

我有两列完整的文字,我希望将它们并排放在一起。例如,我有

abc
def
ghi

123
456
789

我想要

123 abc
456 def
789 ghi

我能找到的是如何将相同的行粘贴到列中每行的末尾。我无法弄清楚如何在另一列的末尾粘贴多行文本块。

6 个答案:

答案 0 :(得分:60)

我想知道为什么"视觉阻止模式"不是为我工作。关键是在视觉模式下猛拉(或删除)。

我发现自己需要从具有可变长度的excel列中复制一些东西。以下是我的表现方式:

Names
Donald Knuth
Sebastian Thrun
Peter Norvig
Satoshi Nakamoto

Age
100
50
60
45

我们假设你想把第二列放在第一列之后。

  1. 以视觉方式对它进行评价:
    • 将光标移动到Age
    • 的开头
    • Ctrl + v进入可视模式
    • 将光标移至5
    • 中的45
    • y以阻止(或d删除)
  2. 你现在已经以视觉模式猛拉了。

    1. 粘贴(在正常模式下)

      • 移动到第一行的末尾并添加更多空格,因为它比第二行短。例如。如果您粘贴"块"如果不添加额外的空格,它将覆盖"运行"在Sebastian Thrun。

      • 现在你在第一行,在最后一个字符后插入几个空格。确保您未处于插入模式并点击p以粘贴该块。 (如果要粘贴插入模式,请使用ctrl+r "

    2. enter image description here

答案 1 :(得分:51)

使用视觉块(ctrl-v)剪切字母列。然后移动到数字列的第一行。移到最后并创建一个空格。然后粘贴字母列。

答案 2 :(得分:15)

你有:

abc
def
ghi

123
456
789

将光标移到a上。然后CTRL+V,将光标移至i。按y

接下来,在3字符后添加一个空格,然后按p

完成。

答案 3 :(得分:3)

这看起来很明显,但是如果你从外部复制的缓冲区粘贴,那么只能使用可视模式粘贴。您可以做的是首先在空白区域进行普通粘贴,然后使用上述方法进行垂直切割/粘贴。

答案 4 :(得分:3)

如果您使用的是Mac,并且无法弄清楚粘贴为何在新行中插入该块,那是因为您使用的是系统粘贴板。

没问题,只是用缓冲区拉动/粘贴:

  1. Ctrl v -选择要提取的内容
  2. 字母 y -拉入letter缓冲区
  3. 转到要粘贴的位置
  4. 字母 p -从letter缓冲区粘贴

请确保letter不是+,因为它不是系统粘贴板缓冲区,因此将具有相同的效果。

答案 5 :(得分:0)

如果您想手动将寄存器类型设置为blockwise,请使用此

:call setreg(0, getreg(0), 'b')

:call setreg('*', getreg('*'), 'b')

用于从电子表格编辑器粘贴列。

有关详细信息,请参阅:help setregvimtip