在Vim中交互式搜索/替换正则表达式?

Interactive search/replace regex in Vim?

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

1
     %s/old/new/g

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


添加标志c(在vim命令提示符下):

1
:%s/old/new/gc

每次出现'old'时都会给你一个是/否的提示。

old

一旦选择了确认替换,Vim的内置帮助提供了有关可用选项的有用信息。使用:

1
:h :s

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

Text that says

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


Mark Biek指出使用:

1
%s/old/new/gc

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

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

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


我认为你正在寻找c,例如s/abc/123/gc,这将导致VIM确认替换。请参阅:help:替换更多信息。


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


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

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

那是find"old"substitute 3 characters for"new"find nextrepeat substitute等等。

这对于大规模替换来说是一种痛苦,但是它允许您有选择地忽略一些旧的(通过再次按n来找到下一个而不是.来重复替换)。


如果您的替换文本需要针对每个匹配的事件进行更改(即,不是简单地选择是/否来应用单个替换),您可以使用我制作的名为interactive-replace的Vim插件。


Neovim现在有一个预览替换的功能:

enter image description here

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