2015-05-03 100 views
7

我最近發現了一個替代命令vim,其中作者將/替換爲!,如下所示::%s!foo!bar,我不明白與傳統:%s/foo/bar的區別。Vim什麼是替代命令中使用感嘆號

我搜索了一些關於這種語法的文檔,但是我沒有找到任何相關的東西,所以我試着自己試驗,但我無法弄清楚兩種形式之間的區別。以下是我發現:

  • 不能在同一個命令混合/!。例如::%s/foo!bar將會失敗。
  • 符號!可用於包含/的模式。例如,如果我想在我的文件中將</替換爲%,我可以執行:%s!</!%!g而不是:%s/<\//%/g:我不需要在第一個命令中轉義/,但如果這是唯一使用!,我會感到驚訝。
  • 一些正則表達式似乎與/失敗,並與! propertyly工作,但由於我遠不是一個正則表達式的主人,我不確定這一點。

所以我的問題是:是什麼在VIM替代/!之間的區別時,我應該使用一個,而不是其他?

+0

此問題[也發佈在vi.stackexchange](http://vi.stackexchange.com/q/3156/51)。 – Carpetsmoker

+0

確實我犯了一個錯誤的雙重貼子,我在vim上標記了它,知道我該怎麼做。 – statox

回答

11

兩者都可以使用,只要它們一致(不混合)即可。通常使用/。但是如果要替換的字符串包含多個/,則可以使用其他字符。例如:

:%s!/usr/local/bin!/usr/bin! 
:%s:/usr/local/bin:/usr/bin: 
:%s,/usr/local/bin,/usr/bin, 
+0

好的,謝謝你的回答!我在哪裏可以找到可用作分隔符的char列表?還是那些無法使用的? – statox

+1

@statox,它記錄在':help E146'(來自':help change.txt')。 – tivn

+0

這就是我正在尋找的!非常感謝! – statox