在Vim中编写替换正则表达式模式时如何调用搜索模式?

8
以下是翻译:
场景如下:我有一个填满了各种折中垃圾的大文件,想使用正则表达式进行搜索。我尝试各种方法,最终找到了一个完美的搜索模式,通过使用/命令并查看其高亮显示。
现在,我想要使用这个模式进行替换。于是,我开始输入:%s/,但我无法记得这个模式是什么。是否有一些神奇的键盘命令可以在此处拉入我的上次搜索模式?如果我正在编写特别复杂的正则表达式,我甚至会打开一个新的MacVim窗口,在那里将正则表达式输入到缓冲区中,然后将其重新输入到Vim窗口中以编写替换模式。必须有更好的方法。
3个回答

10

在我撰写问题后,我发现了自己的答案:Vim技巧列表将其列为替换上次搜索,可以通过以下两种方式之一完成。

  1. 使用空搜索:

    :%s//replace/g

  2. 按下 Ctrl + r 然后按 / 从搜索缓冲区中调用材料(/ - 您可以使用任何其他命名的缓冲区,只需用表示该缓冲区的字母替换 /)。


2
抱歉自问自答了,朋友们。我确实在寻找答案时遇到了困难,因此认为值得发布。Meta表示回答自己的问题是可以的 - http://meta.stackexchange.com/questions/12513/should-i-not-answer-my-own-questions - Tom Morris
1
如果你最终需要使用多个神秘的正则表达式来筛选你的折衷垃圾,将它们保存在变量中可能会很有用,例如使用 :let b:tires_sifter = @/ 来处理一种类型的垃圾,然后在找到该实体的实例位置后,再使用 :let b:pope_on_a_ropes_sifter = @/。通过将它们重新分配给 @/,构建一个 exec 行来使用它们,或者使用 search()(如果我没记错的话,也许是 matchadd)函数来提取它们。 - intuited

4

有一个 / 寄存器,其中包含当前的搜索模式,因此您可以使用 <CTRL-R>/ 将搜索模式插入到您正在输入的任何内容中(无论是在插入模式还是在命令行模式下)。


1
另一个选项:在使用<CTRL-R>/输入模式后,可以使用<CTRL-F>编辑命令行。

:help cmdwin


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