2

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

one
two
three

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

AAA
BBB
CCC

如何在第二个块前面插入第一个块以获得此:

oneAAA
twoBBB
threeCCC

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

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

4

3 回答 3

3

首先,您只需将剪贴板中的内容粘贴到文件中,使文件看起来像:

AAA
BBB
CCC

one
two
three

然后ctrl-v逐块选择一,二,三,按xd

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

我没有测试,但应该工作

于 2013-05-01T18:04:36.510 回答
2

寄存器中的文本具有以下类型之一:line-wisecharacter-wiseblock-wise。当您将文本拉入寄存器然后将其粘贴时,它会保留它的“类型”。因此,如果您用 拉出一行yy然后粘贴,p则文本将是逐行的。这通常是完美的,但偶尔将寄存器类型更改为其他内容会变得很方便。在你的例子中,我想你已经逐行复制了文本,但你想逐块粘贴它。setreg()您可以通过该功能“重铸”寄存器。

将寄存器a转换为逐块的示例

:call setreg('a', @a, "b")

将未命名寄存器转换为块状的示例

:call setreg('"', @@, "b")

重新铸造寄存器后,你可以做一个正常的por P。您可以l按行、c按字符和b按块使用。

但是,如果您只想逐行粘贴某些内容,则通常更容易使用:put

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

于 2013-05-01T18:26:44.170 回答
1

使用我的UnconditionalPaste 插件,您可以简单地将光标放在文本中的第一个位置,然后通过剪贴板 ( )A粘贴;这是插件提供的特殊映射之一,它强制粘贴源是块状的,就好像你在 Vim 中从可视块状选择中拉出它一样。"+"+gbPgbP<C-V>

于 2013-05-01T18:19:36.573 回答