在这种情况下,最好选择手动应用替换的行。 即。不需要自动查找和替换。
将此过程视为从文本行创建“标记”并浏览项目列表,每个项目都是“标记”行后面的一行文本,并决定是否应使用该行覆盖该行“邮票”的内容与否。如果是这样,请用“标记”替换该行。
最后一步,即用光标内容触发删除/替换光标下的行应该尽可能简单,最好像按 .
一样简单(重复上次更改)或 @@
(执行宏注册@的内容)。
简单的工作流程:
V
(按行方式启动可视模式) y
(将文字拖入未指定的注册表) V
(按行方式启动可视模式)(选择要替换的文字)p
(将文字放在光标后的未指定寄存器中) 不起作用。
具体来说,替换文本会覆盖包含最初复制的行的寄存器,并打算用作“戳记”。
我尝试将 "_y
用于yank
或delete
到命名寄存器“下划线”,避免丢失邮票内容,但我正在寻找能够快速舒适地输入的东西,因为我手动浏览列表并在我认为合适的地方应用替换。
如果我可以提供帮助,我宁愿不使用宏或“重映射”。
为了进一步明确,请参阅下面的示例起始文件,然后是所需的最终阶段。
在这个阶段,我选择blueberry
并将其作为我的“印章”。
blueberry
apple
banana
coconut
apple
banana
coconut
apple
banana
coconut
在浏览列表后,我已经应用了一些替换,使用某些行的“stamp”“on”,使它们与“stamp”行相同。
blueberry
apple
banana
blueberry
apple
banana
coconut
apple
banana
blueberry
答案 0 :(得分:1)
如果没有至少一点“重新映射”,我认为你不会达到目标。
我一直在使用这个“很长一段时间”:
vnoremap <leader>p "_dP
p
和P
仍然像往常一样工作,当我想稍后重复相同的粘贴时,我只是通过视觉选择点击,p
。您还可以映射单个功能键以使整个事情更快。
另外,您知道替换的c
标志吗?
:%s/coconut/blueberry/c
会要求您确认每场比赛。
答案 1 :(得分:0)
从光标位于要复制的行的开头处开始:
y$
猛拉整条线(不包括换行符)。j
和k
前进到下一行要替换(根据需要重复)C<c-r>0<esc>0
(第一次) .
(后续时间) 每一步后光标将保持在零列。
答案 2 :(得分:0)
这里的许多答案概述了一般的键或命令。我已将它们转换为我的ReplaceWithRegister plugin,它还处理了许多极端情况,并允许通过.
命令快速重复。我也经常使用你描述的创建标记和替换技术,并发现我的脚本不可或缺。如果你不喜欢它,插件页面也有链接到替代插件。
答案 3 :(得分:0)
一个非常简单的解决方案:只需将此脚本放在.vimrc中,然后通过键入,,(两个逗号)进入“无副作用”模式来关闭删除键的“缓冲区覆盖”副作用行为。
在这种模式下,您的工作流程现在可以完全按照您的描述运行:无论您喜欢什么,都可以自由反复地选择,粘贴和删除 - 您的缓冲区始终保持不变。如果您希望恢复vim正常的缓冲区更改行为,请再次键入,,
脚本是接受的答案: