说我有两个文本块。一个在我的剪贴板中:
one
two
three
另一个是在我正在vim中编辑的文件中:
AAA
BBB
CCC
如何在第二个块前面插入第一个块来实现此目的:
oneAAA
twoBBB
threeCCC
我希望有一种方法可以在vim中执行此操作(某些涉及可视块模式的操作?),但如果我可以使用另一个(* nix)工具执行此操作,我也对此感兴趣。
当我写完这个问题时,我意识到我可以通过使用谷歌电子表格并将块作为相邻列粘贴,然后将这些块粘贴到我的文件中来实现我正在寻找的东西。我仍然想知道vim是否有可能。
答案 0 :(得分:3)
首先,您只需将剪贴板中的内容粘贴到文件中,即可使文件显示为:
AAA
BBB
CCC
one
two
three
然后ctrl-v
按顺序选择一,二,三,按x
或d
最后将光标移至第一个A
,按P
我没有测试,但应该工作
答案 1 :(得分:2)
寄存器中的文字类型为:line-wise
,character-wise
或block-wise
。当您将文本放入寄存器然后粘贴它时,它会保持“类型”。因此,如果您使用yy
划线,然后执行粘贴p
,则文本将按行进行。这通常是完美的,但只需一次就可以方便地将寄存器类型更改为其他类型。在你的例子中,我想你已经逐行复制了文本但是你想要逐块地粘贴它。您可以通过setreg()
功能“重新投射”注册表。
将注册表a
转换为块状
:call setreg('a', @a, "b")
将未命名的寄存器转换为逐块
的示例:call setreg('"', @@, "b")
重新投票后,您可以正常p
或P
。您可以将l
用于行,c
用于字符方式,b
用于逐字方式。
但是,如果您只想按行标记某些内容,则通常更容易使用:put
如果您发现自己在日常工作流程中进行了多次注册,那么使用Ingo Karkat的UnconditionalPaste插件可能会有所帮助。
答案 2 :(得分:1)
使用我的UnconditionalPaste plugin,您只需将光标放在文字中的第一个A
上,然后通过"+
从剪贴板("+gbP
)粘贴; gbP
是插件提供的特殊映射之一,它强制粘贴源 blockwise ,就像你从<C-V>
视觉块选择中将它从Vim中拉出来一样