【问题标题】:How does one escape backslashes and forward slashes in VIM find/search?如何在 VIM 查找/搜索中转义反斜杠和正斜杠?
【发布时间】:2011-01-28 17:45:03
【问题描述】:

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

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

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

【问题讨论】:

  • 严格来说不是一个答案,但您可能应该阅读 :help magic
  • +1 Tom,通常是使用非常简单的正则表达式时最理智的解决方案。
  • @Tom @Randy 然而......我服务器上的vi --help 没有提供转义特殊字符的解释......这就是人们开始使用stackoverflow的原因......
  • @aequalsb :help magic 是您在 inside vim 中键入的内容。它不是 vim 的命令行参数。

标签: regex vim


【解决方案1】:

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

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

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

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

这可以省去您在带有大量斜杠的模式中输入所有那些耗时且令人困惑的反斜杠。

来自documentation

而不是围绕模式和替换字符串的/,您 可以使用任何其他单字节字符,但不能使用字母数字字符, \"|。如果您想在搜索中包含/,这很有用 模式或替换字符串。

【讨论】:

  • 所以它会自动找出你选择的分隔符?
  • 是的。 s 之后的字符被视为分隔符。我不知道在文档中哪里找到了列表,但我很确定至少 /:;*%@# 是有效的。
  • 这在将 \ 替换为 / 在具有大量 Windows 样式路径的文件中时派上用场。谢谢。
  • 要获取文档中的该消息,请使用:h e146
  • 不知道您可以更改分隔符!太棒了 - 谢谢。
【解决方案2】:
%s:<dog/>:<cat>

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

【讨论】:

  • +1 表示: 分隔符。我不知道你可以用那个。我总是在“逃生”时使用@
  • @JeffreyJose :s 后面的任何字符都被定义为分隔符。您可以使用大多数非字母数字字符(但不能使用\"|)。 (source)
【解决方案3】:

用反斜杠引用它们。此外,使用斜线以外的其他分隔符通常会有所帮助。

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

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

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 注意?会做一个向后搜索,和不一样。
    【解决方案5】:

    语法是:

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

    【讨论】:

      【解决方案6】:

      反斜杠 斜杠 反斜杠 星号

      /(<- the prompt)\/\*
      

      所以你输入后它看起来像

      /\/\*
      

      【讨论】:

      • 这个答案与在网站上使用了近六年的答案有何不同?
      猜你喜欢
      • 1970-01-01
      • 2013-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-29
      • 2011-05-16
      相关资源
      最近更新 更多