Vim /在vi中搜索和替换?
在vi,search和replace中,如何转义“/”(正斜杠)以使其正确。在一条小路上说 比如:/Users/tom/documents/pdf/Vim /在vi中搜索和替换?,vim,text,replace,Vim,Text,Replace,在vi,search和replace中,如何转义“/”(正斜杠)以使其正确。在一条小路上说 比如:/Users/tom/documents/pdf/ :%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/doc
:%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///g——显然失败了
:%s/\/Users/tom/documents/pdfs\///g--失败并出现一个尾部错误
:%s/'/Users/tom/documents/pdfs/'/g--失败,并出现一个尾部错误
我遗漏了什么?您也需要在内部避开前斜杠
:%s/\/Users\/tom\/documents\/pdfs\//<new text>/g
:%s/\/Users\/tom\/documents\/pdfs\///g
或者你也可以做:%s,foo/bar/baz,foo/bar/boz,g
-我几乎从不使用斜杠,因为这样可以避免混淆。正如Sarah所建议的,你需要避免所有正向斜杠
您可以使用除正斜杠之外的另一个字符作为分隔符。如果您的搜索字符串中有很多斜杠,这将非常方便
:%s#/Users/tom/documents/pdfs/#<new test>#g
:%s#/Users/tom/documents/pdfs/#g
这在vim中非常有效。我对香草vi不是100%肯定。我知道这个问题已经有好几年了,但对于其他可能会在这个问题上寻找更简单解决方案的人来说,2014年,你可以用“/”分隔符代替“!”之类的东西,只要你在前面、中间和后面这样做:
:%s!foo/bar/baz!foo/bar/boz!g
与梅德尔的回答非常相似。。。但是,我发现感叹号作为分隔符要容易得多。我只是想确认这个方法在当前版本的VIM中仍然有效,我在MacOSX Mavericks中使用它。您可以使用
?
进行搜索
如果在寄存器中搜索模式,并且模式包含一个“/”字符,您只需从正常模式使用?
命令而不是/
命令即可开始模式匹配。在这种情况下,“/”字符不再需要转义。(但是现在需要转义“?”字符)
?
将以与/
相反的方向进行搜索,因此如果您不介意搜索方向,并且您的搜索模式不包含“?”字符
此外,如果需要更多信息,请检查
escape()
脚本。Windows对目录使用反斜杠,Linux对目录使用正斜杠。Vim是一个适用于操作系统的文本编辑器。由于两个操作系统在如何使用斜杠方面有不同的目录路径解释,所以Vim必须需要一种解释Windows twisted方法的方法
LINUXFORWARD与WINDOWSBACK(目录斜杠)
- 斜杠在Windows中是完全颠倒的,在Linux中很容易说明
- 窗口:
C:\ProgramFiles(x86)\Microsoft OneDrive\
- Linux:
/usr/bin
- 修正方法是双反斜杠
- 好:
:%s/c:\\程序文件(x86)\\ Microsoft OneDrive\\/g\\/code>
- 坏的:
:%s/c:\Program Files(x86)\Microsoft OneDrive\/UnableToReplaceHatterance/g
- 如果使用网络路径,Windows使用两个斜杠
,则意味着每个反斜杠都需要另一个反斜杠,因为它总是保持相等\\
- e、 g.网络路径:
\\Foo\Bar\
%s/C:\\ProgramFiles(x86)\\foo\\bar/\\\\\foo\\bar\\
- 请注意
\\\
- e、 g.网络路径:
n
标志保存重复,该标志在不替换的情况下执行搜索。e、 g.:%s,foo/bar/baz,,gn
不知道它可以用逗号工作。我已经习惯了%s:old/old:/old/new:g
我想不出这些天你怎么会在vi上取得成功。我认为大多数主要的Linux发行版只是将“vi”重定向到vim,并关闭了许多功能。因为Linux不是唯一的操作系统:)许多BSD附带香草vi或nvi,大多数商业unix系统也提供。我还记得(不幸地)在IRIX上编译vim的日子,因为我无法使用vanilla vi。不久前,Debian将vi链接到nvi,NetBSD、FreeBSD和OpenBSD也是如此。有些还附带了vim-as-vim。可能是Genius的复制品!我只是在搜索(使用/
),没有替换,所以我没有要更改的分隔符。