【问题标题】:/ in vi Search and replace?/ 在 vi​​ 中搜索和替换?
【发布时间】:2010-12-13 16:00:11
【问题描述】:

在 vi 中,搜索和替换,如何转义 '/'(正斜杠)以使其正确。在路径中说。

喜欢:/Users/tom/documents/pdfs/

:%s//Users/tom/documents/pdfs//<new text>/g  --FAILS (obviously)

:%s/\/Users/tom/documents/pdfs\//<new text>/g -- FAILS with a trailing error

:%s/'/Users/tom/documents/pdfs/'/<new text>/g -- FAILS with a trailing error

我错过了什么?

【问题讨论】:

标签: vim text replace


【解决方案1】:

或者你也可以使用:%s,foo/bar/baz,foo/bar/boz,g - 我几乎从不使用斜线,因为转义混淆。

【讨论】:

  • 老兄,我不知道!我猜你可以使用任何字符来分隔字段吗?
  • 是的,我相信是这样,我只是习惯了逗号。
  • 你领先我几秒 :)
  • 不错的提示!您还可以使用 n 标志来避免重复,该标志在没有替换的情况下进行搜索。例如:%s,foo/bar/baz,,gn
  • 不知道它会使用逗号。我习惯了%s:old/old:/old/new:g
【解决方案2】:

您也需要在内部转义正斜杠。

:%s/\/Users\/tom\/documents\/pdfs\//<new text>/g

【讨论】:

    【解决方案3】:

    正如莎拉建议的那样,您需要转义所有正斜杠。

    您可以改用除正斜杠以外的其他字符作为分隔符。如果您的搜索字符串中有很多斜杠,这会很方便。

    :%s#/Users/tom/documents/pdfs/#<new test>#g
    

    这在 vim 中完美运行。我不是 100% 确定香草 vi。

    【讨论】:

    • 我想不出这些天你是如何进入 vi 的。我在想大多数主要的 Linux 发行版只是将“vi”重定向到 vim,并关闭了许多功能。
    • 因为 linux 不是唯一的操作系统 :) 许多 BSD 附带 vanilla vi 或 nvi 大多数商业 unix 系统也这样做。我记得(不开心)不得不在 IRIX 上编译 vim 的日子,因为我无法使用 vanilla vi。
    • 不久前,Debian 将 vi 链接到 nvi,NetBSD、FreeBSD 和 OpenBSD 也是如此。有些还附带 vim-as-vim。
    【解决方案4】:

    我知道这个问题已经有好几年了,但是对于其他可能会在这个问题上寻找更简单解决方案的人来说,在 2014 年,您可以将“/”分隔符替换为“!”之类的其他内容,只要您在前面,中间和后面做,像这样:

    :%s!foo/bar/baz!foo/bar/boz!g
    

    与梅德的回答非常相似......但是,我发现感叹号更容易被视为分隔符。而且我只是想确认这个方法在我在 Mac OSX Mavericks 中使用的当前版本的 VIM 中仍然有效。

    【讨论】:

      【解决方案5】:

      您可以使用?进行搜索

      如果在寄存器中搜索模式,并且模式包含'/'字符,您可以简单地使用? 命令而不是普通模式下的/ 命令来启动模式匹配。在这种情况下,“/”字符不再需要转义。 (但是您现在需要转义 '?' char)

      ? 将在/ 的相反方向搜索,所以如果您不介意搜索方向,并且您的搜索模式不包含“?”字符。

      此外,如果您想了解更多,请查看escape() 脚本。

      【讨论】:

      • 天才!我只是在搜索(使用/)而不是替换,所以我没有要更改的分隔符。
      【解决方案6】:

      Windows 对目录使用反斜杠,Linux 对目录使用正斜杠。 Vim 是一个适用于操作系统的文本编辑器。由于两个操作系统对于如何使用斜线有不同的目录路径解释Vim 必须需要一种方法来解释 Windows 扭曲方法。

      LINUXFORWARD 与 WINDOWSBACK(目录斜线)

      • 斜线在 Windows 中是完全颠倒的,在 Linux 中很容易表述
        • Windows:
        • C:\Program Files (x86)\Microsoft OneDrive\
        • Linux:
        • /usr/bin

      解决方案

      我只能说明 Vim 在 Windows 上查找和替换的困难,因为我不在 Linux 电脑上。

      • 修复是双反斜杠
        • 好:
        • :%s/c:\\Program Files (x86)\\Microsoft OneDrive\\/annoyancereplaced/g
        • 不好:
        • :%s/c:\Program Files (x86)\Microsoft OneDrive\/unabletoreplaceannoyance/g
      笔记
      • 如果使用 网络路径,其中 Windows 使用两个斜杠 \\,那么这意味着对于每个反斜杠都需要另一个反斜杠,因为它始终保持均匀
        • 例如网络路径:\\Foo\Bar\
        • %s/C:\\Program Files (x86)\\foo\\bar/\\\\Foo\\Bar\\
        • 注意\\\\

      【讨论】:

        猜你喜欢
        • 2013-08-12
        • 2017-01-27
        • 2017-01-13
        • 2016-10-17
        • 2012-06-06
        • 2015-03-08
        • 2013-07-13
        • 2014-12-09
        • 2014-12-03
        相关资源
        最近更新 更多