2011-04-11 34 views
1

在我的公司,我們有代碼約定來編寫$ foo。 $ bar(帶有空格)。因爲我無法讓熟悉(我不想討論:P),我寫了下面的vim替換功能:不要在vim中替換php-strings

:%s/\(\w\|\]\|'\|\"\)\s\?\.\s\?\('\|\$\|\"\|(\)/\1 \. \2/eg 

..這符合我需要到目前爲止一切。但現在我也有String,我不想替換。

那麼,如何忽略像「foo.bar」或「foo.bar」這樣的字符串,而不是$ foo。$ bar?

更新:我也很高興與一個完全腳本函數。我只是想知道除了臨時刪除所有的PHP字符串之外沒有別的辦法。重新計算實際的替換位置將會是一團糟,不是嗎?

+3

您將無法使用只是一個正則表達式強勁做到這一點。 – nickf 2011-04-11 09:19:03

回答

1

您可以使用語法高亮這裏:

:%s/\(\w\|\]\|'\|\"\)\s\?\.\s\?\('\|\$\|\"\|(\)/\=synIDattr(synID(line('.'),col('.'), 0),'name')!~?'phpString\(Single\|Double\)'?submatch(1) . ' . ' . submatch(2):submatch(1).'.'.submatch(2)/eg 

基本上這意味着,如果光標下方的字符串是語法型phpStringSingle而不是phpStringDouble的不是,然後通過添加一個'取代。 '在每個捕獲組之間,否則保持原樣。

在閱讀更多關於它:

:h sub-replace-expression 
:h expr1 
+0

完美,謝謝! – 2011-06-13 12:17:04