/ in vi搜索和替换?

时间:2009-11-06 00:32:28

标签: vim text replace

在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

我错过了什么?

6 个答案:

答案 0 :(得分:115)

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

答案 1 :(得分:64)

你也需要在内部逃避正斜杠。

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

答案 2 :(得分:14)

正如莎拉建议的那样,你需要逃避所有正斜杠。

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

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

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

答案 3 :(得分:4)

我知道这个问题已有几年的历史了,但是对于那些可能会寻求更简单解决方案的人来说,在2014年,您可以替换&#34; /&#34;除了像#34;!&#34;之类的其他东西的分隔符,只要你在前面,中间和后面这样做,就像这样:

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

非常类似于Meder的答案......但是,我发现感叹号作为分隔符更容易查看。我只是想确认这个方法仍然适用于当前版本的VIM,我在Mac OSX Mavericks中使用它。

答案 4 :(得分:4)

您可以使用?进行搜索

如果在寄存器中搜索模式,并且模式包含&#39; /&#39;你可以在正常模式下使用?命令代替/命令来开始模式匹配。在这种情况下,不需要进一步逃脱&#39; /&#39;焦炭。 (但是你需要逃避现在的#&#39;

?将在/的相反方向搜索,因此如果您不介意搜索方向,并且您的搜索模式不包含&#39;?& #39;炭。

此外,如果您需要更多,请查看escape()脚本。

答案 5 :(得分:0)

Windows使用反斜杠表示目录,而Linux使用正斜杠表示目录。 Vim是一个文本编辑器,适用于操作系统。由于两个操作系统在如何使用斜杠方面都有不同的目录路径解释,因此Vim必须找到一种解释Windows扭曲方法的方法。

LINUXFORWARD与WINDOWSBACK(目录扩展)

  • 在Windows中,斜杠实际上是相反的,对于Linux来说很容易声明
    • Windows:
    • C:\Program Files (x86)\Microsoft OneDrive\
    • Linux:
    • /usr/bin

解决方案

  

我只能说Windows上Vim的Find&Replace挣扎,因为我不在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\\
    • 通知\\\\