Vim /在vi中搜索和替换?

Vim /在vi中搜索和替换?,vim,text,replace,Vim,Text,Replace,在vi,search和replace中,如何转义“/”(正斜杠)以使其正确。在一条小路上说 比如:/Users/tom/documents/pdf/ :%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/doc

在vi,search和replace中,如何转义“/”(正斜杠)以使其正确。在一条小路上说

比如:/Users/tom/documents/pdf/

:%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
:%s//Users/tom/documents/pdfs///g——显然失败了
:%s/\/Users/tom/documents/pdfs\///g--失败并出现一个尾部错误
:%s/'/Users/tom/documents/pdfs/'/g--失败,并出现一个尾部错误

我遗漏了什么?

您也需要在内部避开前斜杠

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

或者你也可以做
:%s,foo/bar/baz,foo/bar/boz,g
-我几乎从不使用斜杠,因为这样可以避免混淆。

正如Sarah所建议的,你需要避免所有正向斜杠

您可以使用除正斜杠之外的另一个字符作为分隔符。如果您的搜索字符串中有很多斜杠,这将非常方便

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

这在vim中非常有效。我对香草vi不是100%肯定。

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

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

与梅德尔的回答非常相似。。。但是,我发现感叹号作为分隔符要容易得多。我只是想确认这个方法在当前版本的VIM中仍然有效,我在MacOSX Mavericks中使用它。

您可以使用
进行搜索

如果在寄存器中搜索模式,并且模式包含一个“/”字符,您只需从正常模式使用
命令而不是
/
命令即可开始模式匹配。在这种情况下,“/”字符不再需要转义。(但是现在需要转义“?”字符)

将以与
/
相反的方向进行搜索,因此如果您不介意搜索方向,并且您的搜索模式不包含“?”字符


此外,如果需要更多信息,请检查
escape()
脚本。

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

LINUXFORWARD与WINDOWSBACK(目录斜杠)
  • 斜杠在Windows中是完全颠倒的,在Linux中很容易说明
    • 窗口:
    • C:\ProgramFiles(x86)\Microsoft OneDrive\
    • Linux:
    • /usr/bin
解决方案 我只能说明Vim在Windows上查找和替换的斗争,因为我不是在Linux pc上

  • 修正方法是双反斜杠
    • 好:
    • :%s/c:\\程序文件(x86)\\ Microsoft OneDrive\\/g\\/code>
    • 坏的:
    • :%s/c:\Program Files(x86)\Microsoft OneDrive\/UnableToReplaceHatterance/g
  • 如果使用网络路径,Windows使用两个斜杠
    \\
    ,则意味着每个反斜杠都需要另一个反斜杠,因为它总是保持相等
    • e、 g.网络路径:
      \\Foo\Bar\
    • %s/C:\\ProgramFiles(x86)\\foo\\bar/\\\\\foo\\bar\\
    • 请注意
      \\\

老兄,我不知道!我猜你可以用任何字符来划界吗?是的,我想是的,我只是习惯了逗号。你比我快了几秒钟:)好提示!您还可以使用
n
标志保存重复,该标志在不替换的情况下执行搜索。e、 g.
:%s,foo/bar/baz,,gn
不知道它可以用逗号工作。我已经习惯了
%s:old/old:/old/new:g
我想不出这些天你怎么会在vi上取得成功。我认为大多数主要的Linux发行版只是将“vi”重定向到vim,并关闭了许多功能。因为Linux不是唯一的操作系统:)许多BSD附带香草vi或nvi,大多数商业unix系统也提供。我还记得(不幸地)在IRIX上编译vim的日子,因为我无法使用vanilla vi。不久前,Debian将vi链接到nvi,NetBSD、FreeBSD和OpenBSD也是如此。有些还附带了vim-as-vim。可能是Genius的复制品!我只是在搜索(使用
/
),没有替换,所以我没有要更改的分隔符。