/在visearch和replace?

在vi中,search和replace,你怎么逃避一个'/'(正斜杠),以便它是正确的。 说一个道路。

如:/ 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 

我错过了什么?

您也需要在内部避开正斜线。

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

或者你可以这样做:%s,foo/bar/baz,foo/bar/boz,g – 由于混乱:%s,foo/bar/baz,foo/bar/boz,g我几乎从不使用斜杠。

正如莎拉所说,你需要逃避所有的正斜线。

除了正斜线之外,您可以使用另一个字符作为分隔符。 如果您的searchstring中有大量的斜杠,这很方便。

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

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

我知道这个问题已经有好几年了,但是对于那些可能着手寻找更简单的解决scheme的人来说,在2014年,你可以用“/”代替“/”之类的东西,只要你在正面,中间和背面,如下所示:

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

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

你可以使用? 寻找

如果在寄存器中search模式,并且模式包含“/”字符,则可以简单地使用? 命令而不是/从正常模式命令开始模式匹配。 在这种情况下,“/”字符不需要更多的转义。 (但是你现在需要转义'?'char)

? 将在/的相反方向search,所以如果你不介意search方向,而你的search模式不包含'?' 焦炭。

另外,如果你想要更多的话,请检查escape()脚本。