在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
我错过了什么?
答案 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扭曲方法的方法。
C:\Program Files (x86)\Microsoft OneDrive\
/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
\\
的网络路径,那么这意味着对于每个反斜杠都需要另一个反斜杠,因为它总是保持反斜杠
\\Foo\Bar\
%s/C:\\Program Files (x86)\\foo\\bar/\\\\Foo\\Bar\\
\\\\