目标
复制一行并使用它来覆盖其后面的一些行。
假设
在这种情况下,最好手动选择要应用替换的行。换句话说,不希望使用自动查找和替换。
类比
将此过程视为创建一个文本“印章”,然后浏览列表 - 每个项目都是“印章”行后面的文本行 - 并决定是否应该使用“印章”的内容覆盖该行(在前一种情况下,当然要用“印章”替换该行)。
将光标下的行替换为印章的内容,应尽可能简单;最好只需按.
(重复上次更改)或@@
(执行宏寄存器@
的内容)即可。
问题
当需要多次替换时,直接进行以下步骤:
- 将光标定位到要复制的行(使用移动命令)。
- 进入逐行可视模式(通过
V
命令)。 - 复制所选文本(使用
y
命令)。 - 手动将光标定位到要替换的行(使用移动命令)。
- 再次进入可视模式以选择要替换的文本(使用
V
命令)。 - 粘贴选定的文本(使用
p
命令)。
然而,当需要进行多次替换时,该方法不起作用。具体来说,在步骤6中替换文本会覆盖包含最初复制并打算用作“印章”的行的(未命名)寄存器。
我尝试过的方法
我尝试使用"_y
来将文本复制或删除到_
寄存器中,从而避免丢失印章的内容,但我正在寻找的是在手动浏览列表并在适当时应用替换时最快捷和舒适的输入方式。
我不想使用的方法
如果可以的话,我宁愿不使用宏或“重映射”。
演示样例文件
请参见下面的起始文件样例及所需的最终阶段,以获得更进一步的说明。
样例文件,起始状态
此时,我选择blueberry
并将其作为我的“印章”。
blueberry
apple
banana
coconut
apple
banana
coconut
apple
banana
coconut
示例文件,期望的最终状态
在经过列表后,我应用了一些替换,对某些行进行了“盖章”,使它们与“印章”blueberry
行相同。
blueberry
apple
banana
blueberry
apple
banana
coconut
apple
banana
blueberry
.
让它工作是非常棒的,但实际上并不起作用(例如,我需要先将0
移动到行首,此时我可能最好使用宏,并且它绝对不能用于带有缩进的“标记”行)。话虽如此,使用.
的想法正是我希望达到的...(当然,我已经知道如何记录宏了,我甚至在我的问题中提到了这一点) - RobottinosinoY
而不是yy
或Vy
来复制初始行。(许多人将Y
重新映射为从光标到行尾的复制,就像D
和C
。但是Y
的默认操作是复制整行) - Trevor Powell