如何在vim中相同行数的前面插入多行?

时间:2013-05-01 17:58:09

标签: vim

说我有两个文本块。一个在我的剪贴板中:

one
two
three

另一个是在我正在vim中编辑的文件中:

AAA
BBB
CCC

如何在第二个块前面插入第一个块来实现此目的:

oneAAA
twoBBB
threeCCC

我希望有一种方法可以在vim中执行此操作(某些涉及可视块模式的操作?),但如果我可以使用另一个(* nix)工具执行此操作,我也对此感兴趣。

当我写完这个问题时,我意识到我可以通过使用谷歌电子表格并将块作为相邻列粘贴,然后将这些块粘贴到我的文件中来实现我正在寻找的东西。我仍然想知道vim是否有可能。

3 个答案:

答案 0 :(得分:3)

首先,您只需将剪贴板中的内容粘贴到文件中,即可使文件显示为:

AAA
BBB
CCC

one
two
three

然后ctrl-v按顺序选择一,二,三,按xd

最后将光标移至第一个A,按P

我没有测试,但应该工作

答案 1 :(得分:2)

寄存器中的文字类型为:line-wisecharacter-wiseblock-wise。当您将文本放入寄存器然后粘贴它时,它会保持“类型”。因此,如果您使用yy划线,然后执行粘贴p,则文本将按行进行。这通常是完美的,但只需一次就可以方便地将寄存器类型更改为其他类型。在你的例子中,我想你已经逐行复制了文本但是你想要逐块地粘贴它。您可以通过setreg()功能“重新投射”注册表。

将注册表a转换为块状

的示例
:call setreg('a', @a, "b")

将未命名的寄存器转换为逐块

的示例
:call setreg('"', @@, "b")

重新投票后,您可以正常pP。您可以将l用于行,c用于字符方式,b用于逐字方式。

但是,如果您只想按行标记某些内容,则通常更容易使用:put

如果您发现自己在日常工作流程中进行了多次注册,那么使用Ingo Karkat的UnconditionalPaste插件可能会有所帮助。

答案 2 :(得分:1)

使用我的UnconditionalPaste plugin,您只需将光标放在文字中的第一个A上,然后通过"+从剪贴板("+gbP)粘贴; gbP是插件提供的特殊映射之一,它强制粘贴源 blockwise ,就像你从<C-V>视觉块选择中将它从Vim中拉出来一样