我在vi
进行查找和替换时经常会这样做:
:%s/find/replace/gc
通过按n
,您可以选择跳过,或按y
进行替换。但是,有时当我打算按n
时,按y
时,我会不小心跳过一个大文件中的一个。
如何倒退到前一个并给我第二个更改?
基本上,如何find
(search
)临时的另一个方向?感谢。
答案 0 :(得分:4)
我不确定您是否要中断当前的查找替换操作并再次恢复。但如果这是可以接受的,这是我的建议:
:%s/find/replace/gc
n
意外跳过替换后,按<ctrl-C>
<shift-N>
返回上次出现的find
期限:.,$s/find/replace/gc
所有这些功能都适用于vim本机功能,无需安装任何插件。
注意:.,$
范围说明符表示对以当前行开头的一系列行执行:s
(substitute
)操作(由{表示) {1}})直到最后行(由.
表示)。
注意2:您可能已经知道了,但是对于偶然发现此帖子的其他人搜索类似的内容重申了这一点 - $
范围说明符表示执行%
(:s
)在当前活动缓冲区的所有行上操作。
答案 1 :(得分:2)
这不是问题的答案,而是一个非常好的选择。我最近发现了CtrlSF插件,它极大地改进了搜索/替换过程。
基本上,您将搜索结果放在缓冲区中,并且可以在此单个缓冲区中执行所有替换。
在您的方案中,您首先执行<p style="width: 20%; border: 1px solid black">ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd1</p>
,获取包含所有文件中所有匹配项的缓冲区,然后执行:CtrlSF find
并使用/find
移动目标并更改它们(当然,您实际上只能更改第一个,然后使用n
重复替换。
如果您错过了某个目标,只需按.
即可返回上一个结果并替换它。
答案 2 :(得分:0)
好像您不能使用此模式回到以前的比赛。出现的栏建议以下命令y/n/a/q/l/^E/^Y
,但其中没有一个将返回到先前的匹配。
但是您可以使用下面介绍的不同模式:
/pattern
,用感兴趣的词替换模式; n
,它将导航您到下一次出现; cw
来执行此操作,此命令将剪切前向单词并将您转换为插入模式; ESC
切换回命令模式; n
直到出现所需的状态; .
,它就会重复前面提到的操作; N
。