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

120

比如,如果我想使用包含反斜杠或正斜杠的字符串进行查找和替换,在vim中应该怎么做?

例子: 查找和替换命令是::%s/foo/bar/g

如果我想查找所有出现的<dog/>并用<cat\>进行替换呢?


3
并非正式答案,但您可能需要阅读:help magic。 - Tom Morris
1
+1 Tom,通常在处理不止是琐碎的正则表达式时,最明智的解决方案。 - Randy Morris
1
@Tom @Randy,然而...我的服务器上的vi --help没有提供转义特殊字符的解释...这也是人们首先来到stackoverflow的原因... - aequalsb
@aequalsb :help magic 是你在 vim 内部输入的内容。它不是 vim 的命令行参数。 - doubleDown
6个回答

187

你可以像在Linux程序中其他地方一样,使用反斜杠来转义字符:

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

但请注意,您可以选择不同的定界符:

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

使用这种方式可以避免在带有大量斜杠的模式中输入所有耗时、令人困惑的反斜杠。

来自文档

除了用于包围模式和替换字符串的/之外,您还可以使用任何其他单字节字符(但不能使用字母数字字符、\"|)。 如果要在搜索模式或替换字符串中包含/,则此方法非常有用。


2
那么它会自动找出您选择的分隔符? - stormist
18
好的,原文已翻译如下:是的,s 后面的字符被视为分隔符。我无法确定我在文档中找到了哪个列表,但至少 / : ; * % @ # 是有效的。 - Cascabel
1
当需要将文件中的\替换为/时,这非常方便,特别是在有大量Windows风格路径的文件中。谢谢。 - Isaac Nequittepas
要在文档中找到该消息,请使用:h e146 - jcollado
1
完全不知道你可以改变分隔符!这太重要了 - 谢谢。 - Brettins
谢谢您提供分隔符的提示,我们在这里需要这样的提示 :) - jnowak

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

如果某些模式变得烦人,您可以替换 / 分隔符。


4
对于“+1 for : 分隔符”,我不知道您可以使用它。 我在“转义混乱”的时候总是使用@ - Jeffrey Jose
@JeffreyJose :s 后面的字符被定义为分隔符。您可以使用大多数非字母数字字符(但不能使用 \"|)。(来源) - user1857492

8

用反斜杠引用它们。另外,除了斜杠之外,使用另一个分隔符通常会有所帮助。

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

或者,如果你必须使用斜杠作为替代命令分隔符

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

6

我在寻找类似的东西,用于搜索包含/字符的注册值(以记录宏)。解决方案是使用?标记而不是/进行搜索。


请注意,?将进行向后搜索,并且与其他符号不同。 - Martin Tournoij

3
语法如下:
:%s/<dog\/>/<cat\\>/g

-1

反斜杠 斜杠 反斜杠 星号

/(<- the prompt)\/\*

所以在你输入后它看起来像这样

/\/\*

3
这个答案与那些已经在网站上存在近六年的答案有何不同? - Martin Tournoij

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