2009-11-06 165 views
48

在vi中,搜索和替換,你如何轉義'/'(正斜槓)以便它是正確的。說一條道路。/in vi搜索並替換?

,如:/用戶/湯姆/文件/ 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/documents/pdfs/'/<new text>/g -- FAILS with a trailing error 

我缺少什麼?

+1

可能的重複[在VIM find/search中如何避免反斜槓和正斜槓?](http://stackoverflow.com/questions/2465156/how-does-one-escape-backslashes-and-forward-slashes -in-vim-find-search) – Pureferret 2016-10-03 10:30:38

回答

55

您還需要在內部轉義正斜槓。

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

@Sarah - Doh!是的,謝謝! – 2009-11-06 00:36:39

96

或者你可以做:%s,foo/bar/baz,foo/bar/boz,g - 我幾乎從來沒有使用斜線因爲逃避混亂。

+0

夥計,我不知道!我猜你可以使用任何字符來分隔字段呢? – 2009-11-06 00:36:55

+0

是的,我相信是這樣,我只是習慣了逗號。 – 2009-11-06 00:37:48

+0

你打我幾秒:) – Bob 2009-11-06 00:37:56

14

正如莎拉所說,你需要逃避所有正斜槓。

您可以改爲使用除前斜槓之外的其他字符作爲分隔符。如果你的搜索字符串中有很多斜槓,這很方便。

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

這在vim中完美運行。我不是100%確定香草vi。

+0

我無法想象這些日子你會怎麼看vi。我在想大多數主要的Linux發行版都會將'vi'重定向到vim並關閉很多功能。 – 2009-11-06 00:38:54

+2

因爲linux不是唯一的操作系統:) 許多BSDs附帶香草vi或nvi 大多數商業unix系統也是如此。我記得(不開心)在IRIX上編譯vim的日子,因爲我無法忍受香草vi。 – Bob 2009-11-06 00:41:19

+0

不久之前,Debian將vi鏈接到了nvi,就像NetBSD,FreeBSD和OpenBSD一樣。一些還附帶了vim-as-vim。 – DigitalRoss 2009-11-06 00:45:09

3

我知道這個問題已經有好幾年了,但對於其他可能在此尋找更簡單的解決方案的人來說,在2014年,您可以用「/」代替「/」之類的其他內容,只要你這樣做在前面,中間和後面,這樣的:

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

非常simiar到梅德的答案...但是,我發現,感嘆號是一個更容易查看作爲分隔符。我只是想確認,這種方法仍然適用於當前版本的VIM,我在Mac OSX Mavericks中使用了這種方法。

2

您可以使用?搜索

在寄存器中的搜索模式的情況下,圖案中包含「/」字符,你可以簡單地使用?命令,而不是/命令從正常模式啓動模式匹配。在這種情況下,'/'字符不需要更多的轉義。 (但是你現在需要轉義'?'字符)

?將搜索與/相反的方向,所以如果您不介意搜索方向,並且您的搜索模式不包含'?'焦炭。

另外,如果需要更多,請檢查escape()腳本。

+0

天才!我只是搜索(用'/')而不是替換,所以我沒有一個分隔符來改變。 – Noumenon 2017-09-18 17:23:14