如何在Vim中将一列文本粘贴到另一列文本之后?

oxiaedzo  于 2023-10-20  发布在  其他
关注(0)|答案(7)|浏览(225)

我有两列的文字,我想把它们并排放。比如我有

abc
def
ghi

123
456
789

我想

123 abc
456 def
789 ghi

我所能找到的就是如何将同一行粘贴到列中每一行的末尾。我不知道如何将多行文本块粘贴到另一列的末尾。

csbfibhn

csbfibhn1#

我在想为什么“视觉障碍模式”对我不起作用。关键是在视觉块模式下进行猛拉(或删除)。
我发现自己需要从Excel列中复制一些长度可变的东西。我是这么做的

Names
Donald Knuth
Sebastian Thrun
Peter Norvig
Satoshi Nakamoto

Age
100
50
60
45

假设你想把第二列放在第一列之后。
1.在视觉阻止模式下猛拉它:

  • 将光标移动到Age的开头
  • Ctrl + v进入可视块模式
  • 将光标移动到45中的5
  • 按下y进行提取(或按下d进行删除)

你现在已经进入了视觉封锁模式。
1.粘贴(在正常模式下)

  • 移动到第一行的末尾并添加更多的空格,因为它比第二行短。如果你粘贴一个“块”而不添加额外的空格,它将覆盖塞巴斯蒂安特龙中的“运行”。
  • 现在你在第一行,在最后一个字符后插入几个空格。确保你不是在插入模式下,然后点击p来粘贴块。(如果要在插入模式下粘贴,请使用ctrl+r "

vvppvyoh

vvppvyoh2#

使用可视块(ctrl-v)剪切字母列。然后移到数字列的第一行。移到最后,留出一个空格。然后粘贴字母列。

r7xajy2e

r7xajy2e3#

如果你在Mac上,不知道为什么粘贴会在新的行中插入块,那是因为你使用的是系统粘贴板。
没问题,只需使用缓冲区进行拉伸/粘贴:

  1. Ctrlv -选择您要拉的内容
    1.“* 字母 *y -拉入letter缓冲区
    1.转到您要粘贴的位置
    1.“letterp -从letter缓冲区粘贴
    确保letter不是+,因为它是系统粘贴板缓冲区,因此它将具有相同的效果。
2ledvvac

2ledvvac4#

您有:

abc
def
ghi

123
456
789

将光标移到a上。然后CTRL+V,并将光标移动到i。按下y
接下来,在3字符后添加一个空格,然后按p
完了

7y4bm7vi

7y4bm7vi5#

这似乎是显而易见的,但如果你是从外部复制的缓冲区粘贴,它将无法与视觉模式粘贴。你可以做的是先在空白区域做一个普通的粘贴,然后用上面的方法垂直剪切/粘贴。

62o28rlo

62o28rlo6#

如果您想手动设置寄存器类型为块方式,请使用以下命令

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

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

用于从电子表格编辑器粘贴列。
有关详细信息,请参见:help setregvimtip

oyjwcjzk

oyjwcjzk7#

如果您的列的长度不同,并且使用分块复制和粘贴来对齐它们很麻烦,那么您可以在从剪贴板获取行的同时进行搜索和替换。
对于投票最多的回答中的行:

Names
Donald Knuth
Sebastian Thrun
Peter Norvig
Satoshi Nakamoto

你可以做:'<,'>s/$/\=getreg('"',1,1)[line("'<")-line('.')],它用默认寄存器的内容来替换行尾,默认寄存器的索引(逐行)是由视觉选择'<的开始减去.上发生的替换的行号。
这将导致NamesAge等,所以也可以添加一个空格,您可以在Vim中使用.连接字符串。:'<,'>s/$/\=' '.getreg('"',1,1)[line("'<")-line('.')]为您提供

Names Age
Donald Knuth 45
Sebastian Thrun 60
Peter Norvig 50
Satoshi Nakamoto 100

这当然对更复杂的情况更有用,比如在键值对的字典中替换键。

相关问题