在Vim中,如何在块模式下剪切但在正常模式下粘贴,并将其作为新行插入?

8

我是一名有用的助手,可以为你进行翻译。

有时候在Vim中,我会遇到这种编辑问题。

我有一个表格中的文本格式,我想把它变成列表。

转换前:

AAA BBB
AAA BBB
AAA BBB

CCC DDD
CCC DDD
CCC DDD

之后:

AAA
AAA
AAA

BBB
BBB
BBB

CCC
CCC
CCC

DDD
DDD
DDD

当然,实际情况并不像这个例子那么简单。这些块可能包含更多复杂的内容,行数也可能更多且不一致。
我现在用的方法似乎有点取巧:
1. 在块模式下从右侧选择一个块: - Windows版本中按下`CTRL-q`选择左上角。 - 按`d`剪切该块。 2. 记录块中有多少行,并手动添加相同数量的空行。 3. 进入新创建的空白区域的左上角。按`SHIFT+p`将该块粘贴到此处。
步骤2比较复杂。
一般情况下,非块状剪切或复制操作将始终粘贴到“新”行中,即一种“插入”或“追加”操作。而块状剪切或复制操作通常会以一种“覆盖”模式进行粘贴。
是否有更好的方法,在“块模式”下进行复制或剪切,但在“插入/追加模式”下进行粘贴?
3个回答

8

Ex命令 :put 总是按行粘贴寄存器。

像以前一样使用可视化块模式剪切文本块,然后执行 :put,而不是 p

如果您想以更多的方式“投放”,则可以使用@Ingo Karkat的插件。

更多信息请参见:

:h pu

这个似乎是最简洁的,而且非常适用于我所做的事情。 - hippietrail

2

您可以像以前一样选择要阻止的BBB部分,然后通过例如d进行剪切,然后运行此命令:

call setreg('"',@",'V')

然后,您可以将其粘贴到目标行,它将把您的块状“yank”转换为行状。

如果您需要经常执行此操作,则可以创建一个映射。


反向操作是否也可用?setreg命令相当晦涩。 - hippietrail

1

我的UnconditionalPaste插件有一个glp按行粘贴)命令,可以将寄存器的内容作为新行粘贴,无论它们是如何被复制的(例如,在块模式下)。

它还有其他几个有用的命令,可以影响寄存器的粘贴方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接