在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
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
med*_*iev 120
或者你可以做:%s,foo/bar/baz,foo/bar/boz,g- 我几乎从不使用斜线,因为逃避混乱.
Sar*_*els 68
你也需要在内部逃避正斜杠.
:%s/\/Users\/tom\/documents\/pdfs\//<new text>/g
Run Code Online (Sandbox Code Playgroud)
Bob*_*Bob 15
正如莎拉建议的那样,你需要逃避所有正斜杠.
你可以使用除正斜杠之外的另一个字符作为分隔符.如果你的搜索字符串中有很多斜杠,这很方便.
:%s#/Users/tom/documents/pdfs/#<new test>#g
Run Code Online (Sandbox Code Playgroud)
这在vim中完美运行.关于香草vi,我不是100%肯定.
我知道这个问题已经有好几年了,但是对于其他可能会寻求一个更简单解决方案的人来说,在2014年,只要您在正面,中间和背面,如下所示:
:%s!foo/bar/baz!foo/bar/boz!g
Run Code Online (Sandbox Code Playgroud)
非常类似于Meder的答案...但是,我发现惊叹号作为分隔符更容易看清。我只是想确认该方法仍在我在Mac OSX Mavericks中使用的VIM的当前版本中仍然有效。
您可以?用来搜索
如果在寄存器中搜索模式,并且模式包含'/'字符,则可以简单地使用?命令而不是/普通模式下的命令来启动模式匹配。在这种情况下,'/'char不再需要转义。(但是现在您需要转义'?'char)
?会以的相反方向进行搜索/,因此,如果您不介意搜索方向,并且您的搜索模式中不包含“?” 字符
另外,escape()如果需要更多内容,请检查脚本。