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

如何在vim中相同数量的行前面插入多行?,vim,Vim,假设我有两段文字。一个在我的剪贴板中: one two three 另一个在我用vim编辑的文件中: AAA BBB CCC 如何将第一个块插入到第二个块的前面以获得: oneAAA twoBBB threeCCC 我希望有一种方法可以在vim中实现这一点(涉及到视觉块模式的东西?),但如果我可以用另一个(*nix)工具实现这一点,我也很感兴趣 当我写完这个问题时,我意识到我可以通过使用谷歌电子表格,将这些块粘贴为相邻的列,然后将它们粘贴回我的文件中,来实现我想要的。我仍然想知道vim是否

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

one
two
three
另一个在我用vim编辑的文件中:

AAA
BBB
CCC
如何将第一个块插入到第二个块的前面以获得:

oneAAA
twoBBB
threeCCC
我希望有一种方法可以在vim中实现这一点(涉及到视觉块模式的东西?),但如果我可以用另一个(*nix)工具实现这一点,我也很感兴趣


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

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

AAA
BBB
CCC

one
two
three
然后
ctrl-v
分块选择一、二、三,按
x
d

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


我没有测试,但应该使用我的

,您只需将光标定位到文本中的第一个
A
,然后通过
“+gbP
”从剪贴板粘贴(
”+
);
gbP
是插件提供的特殊映射之一,它强制粘贴源为块式,就像您在Vim中从一个
视觉块式选择中拖动它一样。

寄存器中的文本具有以下类型之一:
行式
字符式
块式
。当你将文本拉入一个寄存器,然后粘贴它时,它保持“类型”。因此,如果你用
yy
拖动一行,然后粘贴,
p
,文本将按行显示。这通常是完美的,但有时将寄存器类型更改为其他类型会变得很方便。在您的示例中,我假设您已按行复制了文本,但希望按块粘贴。您可以通过
setreg()
函数“重新转换”寄存器

将寄存器
a
按块转换的示例

:call setreg('a', @a, "b")
:call setreg('"', @@, "b")
将未命名寄存器强制转换为块方式的示例

:call setreg('a', @a, "b")
:call setreg('"', @@, "b")
重新转换寄存器后,您只需执行正常的
p
p
。您可以使用
l
表示行,使用
c
表示字符,使用
b
表示块

但是,如果您只想按行粘贴某些内容,只需使用
:put


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

Perfect。我就快到了,但我正在选择我想在视觉模式下插入的块,而不是视觉块模式,然后通过在视觉块中选择目标块的每一行的开头来尝试插入。从视觉块选择开始,就像你说的,效果很好。谢谢。请使用shift+i而不是x/d/p在选定的每行前面插入特定文本。经常派上用场。你可以使用我在这里展示的功能:你比我的帖子快了7分钟!我甚至对你的插件大喊一声。我应该知道我不能在这样的主题上超过Ingo Karkat。@PeterRincker好吧,我很幸运,而且(像往常一样),你提供了大量有用的背景信息,而我只是厚颜无耻地宣传我的插件:-)继续努力!谢谢你的好话,也感谢我使用了你的无条件插件。“我觉得它很方便。”彼得林克,如果你想发布国际非政府组织的文章,你必须选择一些特定的主题。例如,作为一个犹太教徒SPF13/Janus仇恨者,我总是比我的主要敌人有优势!缺点是,就像每一种趋势一样,它们往往会在一段时间后消失,所以我需要尽快找到另一个利基