2014-01-10 82 views
3

在vim中,我們可以用sub-replace-expression替代。當替代字符串以\=開頭時,其餘部分將被解釋爲一個表達式。替換表達式和匹配模式

例如文本:

bar 
bar 

和替代命令:

:%s/.*/\='foo \0'/ 

給出了意想不到的結果:

foo \0 
foo \0 

代替:

foo bar 
foo bar 

的問題是:如何評價EXPRES sion與匹配的模式替代?

回答

6

當您使用子取代表達,正常的特殊置換像&\1不工作了;一切都被解釋爲一個Vimscript表達式。幸運的是,您可以使用submatches()訪問捕獲的子匹配,因此它變爲:

:%s/.*/\='foo ' . submatch(0)/ 
+0

太棒了!謝謝@Ingo Karkat! – hawk

0

你並不需要評估的任何表達,使用正則表達式組適當的逃逸

:%s /\(.*\)/foo \1/ 
+0

謝謝。但實際上我需要找出如何評估這是我的問題的主要目的。 – hawk

1

你需要:%s/.*/foo \0/

隨着您評估​​3210 :%s/.*/\='foo \0'/但這是一個字符串,並將其評估自己。

+0

問題是如何評估表達式中的匹配模式不是正常的查找和替換。 – hawk

+0

顯然,替換表達式的第二部分中的項目會自動評估。 – user2314737

+0

對我而言,它不會自動評估。我有Vim 7.3.1314。 – hawk