vim:在替换命令中使用搜索字符串


16

我经常使用vim /search命令来验证我的正则表达式(只是看它匹配什么)。之后,我通常使用:%sreplace命令,在其中将搜索中的正则表达式用作要替换的字符串,例如,我首先寻找这样的字符串:

/TP-\(\d\{5\}\)-DD-\d\{3\}

它与我想要的完全匹配,所以我进行替换:

:%s/TP-\(\d\{5\}\)-DD-\d\{3\}/\1/g

但是我必须在这里再次编写整个正则表达式。通常,正则表达式要长得多,这就是为什么我要寻找解决方案:

是否有任何现有的快捷方式或vim脚本可将该搜索模式直接粘贴到replace命令中?

我在终端中使用vim(没有gvim)。

Answers:


20

通常,空正则表达式意味着要使用先前输入的正则表达式,因此:%s//\1/g应执行所需的操作。


哇,就是这么简单!正是我需要的,谢谢。
kars7e 2011年

10
另外,如果您要验证或修改最后使用的模式,则可以使用Control-r然后 /搜索模式寄存器(/)的内容直接插入部分键入的命令行中(例如,紧接在后面:%s/)。
克里斯·约翰森

那也是非常有用的提示。谢谢@克里斯!+1
kars7e 2011年

如果我想跟数字“ 23”跟在“ \ 1”后面怎么办?如何避免将其解释为“ \ 123”?
2015年

@Champ由于回溯引用仅上升到\9,因此没有歧义。
库萨兰达

4

查看过去的正则表达式搜索和Ex命令并对其进行更改的另一种好方法是在正常模式下编辑这些命令。在此模式下,您将拥有所有vim功能,包括复制和粘贴。

  • 搜索:不是?/进行搜索,尝试q/q?
  • 用于Ex命令,而不是:尝试q:
  • 退出此模式使用 CtrlC

要了解更多信息,请参阅:help q:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.