我知道全局替换的正则表达式,

     %s/old/new/g

如何在Vim中进行交互式搜索-替换?


当前回答

在vim命令提示符中添加标志c:

:%s/old/new/gc

每次出现'old'时,都会给出一个yes/no提示。

Vim的内置帮助提供了在选择了带有确认的替换后可用的选项的有用信息。使用:

:h :s

然后滚动到确认选项部分。截图:

例如,要替换此匹配项和所有剩余匹配项,请使用。

其他回答

Neovim现在有一个功能inccommand,允许你预览替换:

Inccommand有两个选项:

Set inccommand=split预览分隔窗格中的替换 设置inccommand=nosplit预览活动缓冲区中的替换

图片来自:https://medium.com/@eric.burel/stop-using-open-source-5cb19baca44d 该功能的文档:https://neovim.io/doc/user/options.html#'inccommand'

我通常使用find/substitute/next/repeat命令:-)

/old<CR>3snew<ESC>n.n.n.n.n.n.n.

也就是找到“old”,用3个字符替换“new”,找到next,重复替换,等等。

对于大量的替换来说,这是一个痛苦的过程,但它可以让你选择性地忽略一些旧的出现(通过再次按n来查找下一个而不是。重复替换)。

如果您只想计算'abc'出现的次数,那么您可以执行%s/abc//gn。这并不替换任何东西,只是报告'abc'的出现次数。

在vim命令提示符中添加标志c:

:%s/old/new/gc

每次出现'old'时,都会给出一个yes/no提示。

Vim的内置帮助提供了在选择了带有确认的替换后可用的选项的有用信息。使用:

:h :s

然后滚动到确认选项部分。截图:

例如,要替换此匹配项和所有剩余匹配项,请使用。

Mark Biek指出:

%s/old/new/gc

对于全局搜索,将每个替换替换为确认。但是,我也喜欢交互式地验证旧文本将正确匹配。我首先用正则表达式进行搜索,然后重用该模式:

/old.pattern.to.match
%s//replacement/gc

s//将使用最后一个搜索模式。