当我在vi
中查找和替换时,我经常会这样做:
:%s/find/replace/gc
这为您提供了按n
跳过或按y
替换的选项。 但是,有时当我打算按y
时,我会通过按n
来意外跳过大文件中的一个。
如何倒退到上一个并给我第二次更改?
从本质上讲,我如何暂时find
(search
)另一个方向?谢谢。
我不确定您是否要中断当前的查找-替换操作并再次恢复它。但如果这是可以接受的,这是我的建议:
- 按照您提到的方式开始查找-替换:
:%s/find/replace/gc
- 通过按
n
意外跳过替换后,按<ctrl-C>
中断搜索 - 按
<shift-N>
返回到上一个出现的find
术语 - 当你在这个词时,运行查找-替换有点不同:
:.,$s/find/replace/gc
- 继续操作
所有这些功能都可以与 vim 本机功能配合使用,而无需安装任何插件。
注意:.,$
范围说明符指示对从当前行(.
表示)到最后一行($
表示)的一系列行执行:s
(substitute
)操作。
注意2:您可能知道,但重申其他偶然发现这篇文章的人搜索类似的东西 -%
范围说明符表示对当前活动缓冲区的所有行执行:s
(substitute
)操作。
这不是问题的答案,而是一个很好的选择。我最近发现了 CtrlSF 插件,它极大地改进了搜索/替换过程。
基本上,您将搜索结果放在缓冲区中,并且可以在此单个缓冲区中进行所有替换。
在您的方案中,您首先执行:CtrlSF find
,获取包含所有文件中所有匹配项的缓冲区,然后执行/find
并随n
移动到目标上并更改它们(当然,您实际上可以只更改第一个,然后用.
重复替换)。
如果您错过了某个目标,只需按N
即可返回到上一个结果并替换它。
似乎您无法使用此模式返回到之前的比赛。出现的栏建议以下命令y/n/a/q/l/^E/^Y
但没有人会向后返回到上一个匹配。
但是您可以使用下面描述的略有不同的模式:
- 键入此
/pattern
将模式替换为感兴趣的单词; - 您的光标被导航到第一个出现,如果您不需要更改它,请按
n
它将导航到下一个匹配项; - 由于您了解需要替换单词,因此请键入
cw
,此命令将剪切向前单词并转到插入模式; - 在释放的位置输入所需的文本,然后按
ESC
切换回命令模式; - 现在再次按
n
直到所需的发生; - 由于您意识到需要更改事件,只需按
.
它将重复前面提到的操作; - 如果你想回去,只需使用
N
。