2011-12-16 93 views
8

我試圖搜索並替換$data['user']$data['sessionUser']Vim搜索/替換:我需要逃脫什麼?

但是,無論使用哪種搜索字符串,我都會得到一個「找不到的模式」。

那麼,什麼是正確的搜索字符串?我需要逃避任何這些角色嗎? :%s/$data['user']/$data['sessionUser']/g

回答

2
:%s/\$data\[\'user\'\]/$data['sessionUser']/g 

我沒有測試這一點,但我想它應該工作。

+2

你不需要替換部分中的逃逸。 – 2011-12-16 18:26:33

+0

是的,它的工作。謝謝! – Falassion 2011-12-16 18:30:44

1

[ char在正則表達式中有意義。它代表character ranges$ char也有意義。它代表end-line anchor。所以你必須逃避很多事情。我建議你嘗試一下像this或這個one這樣的小插件,並使用視覺搜索。

+0

我真的很想找一個更容易搜索的選項。我會更多地瞭解內置的搜索和替換,但很可能我會嘗試其中一個向我展示的內容。謝謝。 – Falassion 2011-12-16 18:32:54

2

搜索和VIM取而代之的是幾乎相同sed,所以使用相同的轉義,你會與:

:%s/\$data\['user'\]/$data['session']/g 

請注意,您真正需要的只是逃避搜索部分特殊字符(部分在第一組//之間)。您需要在替換部分中轉義的唯一字符是轉義字符\本身(您在此未使用)。

2

沒有錯與給定的答案,但你可以這樣做:

:%s/$data\['\zsuser\ze']/sessionUser/g 

\zs\ze可用於分隔用替換影響了比賽的一部分。 您不需要轉義$,因爲它處於模​​式的開始位置,並且無法匹配此處的EOL。而且您不需要轉義],因爲它沒有匹配的開始[。但是,如果你不記得所有的規則,逃脫這些角色肯定沒有什麼壞處。請參閱:help pattern.txt瞭解詳細信息,但不要嘗試一次消化所有內容!

如果你想獲得幻想,你可以這樣做:

:%s/$data\['\zsuser\ze']/session\u&/g 

&指整個匹配的文本(由\zs\ze如果存在分隔),因此它成爲「用戶」在這種情況下。在替換字符串中使用\u時,會使下一個字符成爲大寫字母。我希望這有幫助。