如何在VIM查找/搜索中转义反斜杠和正斜杠?


96

例如,如果我想查找并替换为包含反斜杠或正斜杠的字符串,那么在vim中如何实现呢?谢谢!

查找和替换的示例是: :%s/foo/bar/g

如果我想查找的所有出现<dog/>并将其替换为该怎么办?<cat\>


3
严格来说,这不是一个答案,但您应该阅读:help magic
Tom Morris

+1 Tom,通常是使用琐碎的正则表达式时最理智的解决方案。
兰迪·莫里斯

@Tom @Randy但是... vi --help我的服务器上没有提供转义特殊字符的说明...这就是为什么人们开始使用stackoverflow开头的原因...
aequalsb

@aequalsb :help magic是您 vim中键入的内容。它不是vim的命令行参数。
doubleDown '17

Answers:


150

用相同的方法在Linuxy程序中的大多数其他地方使用反斜杠来转义字符:

:%s/<dog\/>/<cat\\>

但是请注意,您可以选择其他定界符:

:%s@<doc/>@<cat\\>@

这样可以省去您键入所有那些费时,令人费解的反斜杠和大量斜杠的麻烦。

文档中

取而代之的/包围模式和替代字符串,可以使用任何其他的单字节字符,而不是一个字母数字字符, \"|。如果要/在搜索模式或替换字符串中包含,则此功能很有用。


1
因此,它将自动找出您选择的定界符?
暴民

11
是。后面的字符s被视为定界符。我无法弄清楚在文档中的列表的位置,但是我敢肯定至少/:;*%@#是有效的。
卡斯卡贝尔

当将\替换为具有许多Windows样式路径的文件中的/时,这非常方便。谢谢。
Isaac Nequittepas 2012年

要获取文档中的消息,请使用:h e146
jcollado 2012年

不知道您可以更改定界符!很大-谢谢。
Brettins

22
%s:<dog/>:<cat>

如果/分隔符使某些模式变得令人讨厌,则可以替换/分隔符。


3
+1表示:分隔符。我不知道你可以用那个。我总是@在“逃生”时代使用
杰弗里·何塞

8

用反斜杠引用它们。另外,除斜杠外,通常还有助于使用其他定界符。

 :%s#<dog/>#<cat\\>#

或者如果您必须使用斜杠作为替代命令定界符

 :%s/<dog\/>/<cat\\>/


2

我正在寻找类似的东西,以搜索包含/字符的寄存器值(以记录宏)。解决方案是使用?令牌而不是进行搜索/


注意,这?将进行向后搜索,并且不相同。
马丁·图尔诺伊

-1

反斜杠反斜杠明星

/(<- the prompt)\/\*

所以输入后看起来像

/\/\*

1
这个答案与网站上已有近六年的答案有何不同?
马丁·图尔诺伊
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.