/ in vi搜索和替换?

JT.*_*JT. 61 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
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

med*_*iev 120

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

  • 不错的提示!您还可以使用`n`标志来保存自己的重复次数,该标志可以在没有替换的情况下进行搜索.例如`:%s,foo/bar/baz ,, gn` (3认同)

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%肯定.

  • 因为linux不是唯一的操作系统:)许多BSD都带有vanilla vi或nvi.大多数商业unix系统都可以.我记得(不幸的是)必须在IRIX上编译vim的日子,因为我无法忍受vanilla vi. (2认同)

Eri*_*010 5

我知道这个问题已经有好几年了,但是对于其他可能会寻求一个更简单解决方案的人来说,在2014年,只要您在正面,中间和背面,如下所示:

:%s!foo/bar/baz!foo/bar/boz!g
Run Code Online (Sandbox Code Playgroud)

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


JXI*_*ITC 5

您可以?用来搜索

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

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

另外,escape()如果需要更多内容,请检查脚本。