2012-07-02 75 views
2

我需要搜索和替換這樣的:如何在vim中轉義搜索字符串?

ExecIf($["${debug}" = "1"]?NoOp 

與此:

GoSub(chanlog,s,1(1,[${CHANNEL}] 

我似乎無法做到這一點的VIM,和我不知道需要轉義什麼,因爲沒有我試過的作品。

回答

1

你要逃離[]和空間:

:s/ExecIf($\["${debug}"\ =\ "1"\]?NoOp/GoSub(chanlog,s,1(1,\[${CHANNEL}\]/ 

只是有點試驗和錯誤

+0

啊,我曾嘗試過所有的空間......但謝謝! – lorsungcu

3

如果您想更改帶有大量標點符號的長字符串,並且它完全匹配(您不希望將它們中的任何一個視爲正則表達式語法),則可以使用nomagic選項進行搜索模式被解釋爲文字字符串。

:set nomagic 
:%s/ExecIf($["${debug}" = "1"]?NoOp/GoSub(chanlog,s,1(1,[${CHANNEL}]/ 
:set magic 

你仍然需要注意的分隔符(在s///命令的斜線),但你可以使用任何字符的是,它並沒有成爲一個斜線,所以當你有這樣的事情並且在搜索或替換字符串中有斜槓,只需選擇其他字符,如[email protected]@[email protected]s:bar:baz:

2

如果您遇到與在VIM替代逃跑的字符問題(:■//),記得nomagic概念,特別是nomagic版本的替代品的::snomagic //:sno //nomagic表示:逐字解釋每個字符。

所以這個應該不用擔心在替代轉義字符工作:

:sno/ExecIf($["${debug}" = "1"]?NoOp/GoSub(chanlog,s,1(1, [${CHANNEL}]/ 

結識魔術主場迎戰nomagic,:SNO //,並符\ v符\ v

:help magic 

一個搜索爲您的字符串nomagic版本使用\V

/\VExecIf($["${debug}" = "1"]?NoOp 
+0

我使用'SNO/...',BT得到嘗試相同的結果;它說這種模式沒有找到。 – lorsungcu

+0

hrm首先確保我們都沒有打字錯誤。然後用':set incsearch'開啓'incsearch',然後開始輸入nomagic search:'/ \ VExecIf' ...並且確保你以這種方式得到文件中的匹配。另外,魔術替代品(逃避第一個[']爲你工作? – pb2q