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

sto*_*ist 87 regex vim

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

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

如果我想找到所有出现的<dog/>并用它替换它会怎么样?<cat\>

Cas*_*bel 137

使用反斜杠在linuxy程序中以其他任何地方转义字符的方式相同:

:%s/<dog\/>/<cat\\>
Run Code Online (Sandbox Code Playgroud)

但请注意,您可以选择不同的分隔符:

:%s@<doc/>@<cat\\>@
Run Code Online (Sandbox Code Playgroud)

这样可以省去所有那些耗费大量时间的错误,在大量斜线的模式中混淆反斜杠.

文档:

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

  • 是.`s`后面的字符被认为是分隔符.我无法弄清楚我在文档中找到了哪个列表,但我很确定至少`/:;*%@#`是有效的. (11认同)
  • 所以它会自动找出你选择的分隔符? (2认同)

Sar*_*rah 21

%s:<dog/>:<cat>
Run Code Online (Sandbox Code Playgroud)

如果它们对某些模式感到烦恼,您可以替换/分隔符.

  • +1:```分隔符.我不知道你可以用它.我总是在'逃避混乱'时使用`@` (3认同)

wal*_*lyk 8

用反斜杠引用它们.此外,除了斜线之外,使用另一个分隔符通常也有帮助.

 :%s#<dog/>#<cat\\>#
Run Code Online (Sandbox Code Playgroud)

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

 :%s/<dog\/>/<cat\\>/
Run Code Online (Sandbox Code Playgroud)


小智 6

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