Interactive search/replace regex in Vim?
我知道进行全局替换的正则表达式,
你如何在Vim中进行交互式搜索替换?
添加标志c(在vim命令提示符下):
每次出现'old'时都会给你一个是/否的提示。
一旦选择了确认替换,Vim的内置帮助提供了有关可用选项的有用信息。使用:
然后滚动到确认选项部分。截图如下:
例如,要替换此匹配项和所有剩余匹配项,请使用a。
-
+1,我今天学到了新东西! vim有这么多隐藏的秘密.. :)
-
确实!我不知道c修饰符。
-
学习vim命令有点像玩Nethack。你永远不会知道单个角色会有什么奇迹。
-
好吧,开玩笑吧!我已经使用vi近30年了,这是我第一次看到这个。这个小编辑甚至在这段时间后仍然让我感到惊讶(特别是vim扩展)。让我的生活更轻松的+1,20多年前你在哪里?
-
@Pax交替建立一个树堡和编写BASIC程序打印出脏话:)
-
我想"c"是为了"确认"
-
老实说,我并不是想要讽刺,但所有这一切都可以通过做":help:s"来找到,这会让你直接找到":help:s_flags"。
-
使用%s // replacement / gc的最后一个搜索模式。这样您就可以在键入匹配的文本时进行确认,这样就可以达到您想要的效果。
-
或者使用ctrl-r ctrl-w检索光标下的文本。我最近在这里学到的东西。
-
@jeremy:这需要知道帮助命令存在,并且知道需要输入"冒号"切换来转到相关的帮助文件。一个人如何或在哪里学到这一点?
-
值得注意的是(来自手册):"如果'gdefault'选项打开,则此标志默认为打开,[g]参数将其关闭。"因此,如果你的.vimrc中有"set gdefault",请使用"%s / old / new / c",否则只会替换每行第一次出现。
-
实际上@jeremy你并不是那么狡猾(无论那意味着什么),对我来说找出帮助命令会有什么帮助是非常有用的。教别人钓鱼,他可以终身养活自己。只需注意,在ubuntu上你需要做"sudo apt-get install vim-runtime"来获取help命令。
Mark Biek指出使用:
全局搜索替换为每个替换的确认。但是,我也喜欢以交互方式验证旧文本是否正确匹配。我首先使用正则表达式进行搜索,然后重用该模式:
1 2
| /old.pattern.to.match
%s//replacement/gc |
s//将使用最后一个搜索模式。
-
使用/学习vim的最大好处之一就是兔子洞有多深!
-
很好,我一直在进行搜索,然后使用 /将最后一次搜索粘贴到substitute命令中。
-
正是我从Sublime Text中错过的!
我认为你正在寻找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 next,repeat substitute等等。
这对于大规模替换来说是一种痛苦,但是它允许您有选择地忽略一些旧的(通过再次按n来找到下一个而不是.来重复替换)。
-
我也使用它,即使是类似的文本。 (3cW <移动到新位置>。。。)
-
这不是反模式!好可爱。你可以使用N在相反的方向搜索。如果你看到一个单词并想要改变它,真的很好。 * cwNewText N.n.n。 (这将跳离光标下的单词,但随后更改下一次出现后立即跳回。
-
什么是?
如果您的替换文本需要针对每个匹配的事件进行更改(即,不是简单地选择是/否来应用单个替换),您可以使用我制作的名为interactive-replace的Vim插件。
Neovim现在有一个预览替换的功能:
图片来自:https://medium.com/@eric.burel/stop-using-open-source-5cb19baca44d
该功能的文档:https://neovim.io/doc/user/options.html#'inccommand'