让vim在替换命令中突出显示匹配的模式

4
当我在vim中使用/命令进行搜索时,当我输入字符时,我能够通过在vim文本区域中突出显示来看到搜索的正则表达式模式的第一个出现。然而,在使用:s命令时,我希望能够在输入要替换的块的模式时看到第一个出现高亮显示,但是我看不到任何高亮显示,据我所知,这是因为命令模式,即使通过/进行搜索也不会有高亮显示。
例如,当我输入:s/foo/bar时,如果文本中有任何fo序列,我希望在输入:s/fo后它会被高亮显示,但实际上并没有。
有人知道任何解决方法吗?谢谢。

3
或者 这个链接 - Yosh
@Yosh 亲爱的先生,您刚刚救了我的命,正是我一直在寻找的! - sandric
在neovim中,可以设置 inccommand 以显示替换的高亮和实时预览。set inccommand=nosplit - Ayush Mandowara
1个回答

13

你不能使用:s作为搜索命令,它是一个:命令,只有搜索命令才能进行高亮显示。

但不要绝望!

/foo可以用来高亮显示内容,然后使用上次搜索的字符串执行:s//bar替换内容。


@MaxCoplan 抱歉,但这太模糊了,我不明白你在问什么。你能举个具体的例子吗? - Amadan
vim中使用正则表达式捕获组。所以,如果我有一堆像<h3>stuff</h3>这样的h3标签,并且我想捕获标签内部并对stuff进行某些操作。 - Max Coplan
1
@MaxCoplan 是的,你可以这样做,就像你在 :s 中编写模式一样。例如,/<h3>\zs.*\ze<\/h3> 后跟 :s//chuff/ 就完全等同于 :s/<h3>\zs.*\ze<\/h3>/chuff/,而 /\(<h3>\).*\(<\/h3>\) 后跟 :s//\1chuff\2/ 就完全等同于 :s//\1chuff\2/。但是,请注意 Zalgo - Amadan
啊,太好了!谢谢。 - Max Coplan
@MaxCoplan 是的,就像 OP 示例中的 :s/foo/bar 一样。如果你想要整个文档,你需要使用范围 1,$ 或缩写 % 来表示: :%s/foo/bar。它也只会每行替换一次;如果你想要在每行中替换所有出现的情况,则使用 g 修改符: :%s/foo/bar/g。当您使用先前的模式时,这将归结为 :%s//bar/g - Amadan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接