在vim中,我們可以用sub-replace-expression
替代。當替代字符串以\=
開頭時,其餘部分將被解釋爲一個表達式。替換表達式和匹配模式
例如文本:
bar
bar
和替代命令:
:%s/.*/\='foo \0'/
給出了意想不到的結果:
foo \0
foo \0
代替:
foo bar
foo bar
的問題是:如何評價EXPRES sion與匹配的模式替代?
在vim中,我們可以用sub-replace-expression
替代。當替代字符串以\=
開頭時,其餘部分將被解釋爲一個表達式。替換表達式和匹配模式
例如文本:
bar
bar
和替代命令:
:%s/.*/\='foo \0'/
給出了意想不到的結果:
foo \0
foo \0
代替:
foo bar
foo bar
的問題是:如何評價EXPRES sion與匹配的模式替代?
當您使用子取代表達,正常的特殊置換像&
和\1
不工作了;一切都被解釋爲一個Vimscript表達式。幸運的是,您可以使用submatches()
訪問捕獲的子匹配,因此它變爲:
:%s/.*/\='foo ' . submatch(0)/
你需要:%s/.*/foo \0/
隨着您評估3210 :%s/.*/\='foo \0'/
但這是一個字符串,並將其評估自己。
問題是如何評估表達式中的匹配模式不是正常的查找和替換。 – hawk
顯然,替換表達式的第二部分中的項目會自動評估。 – user2314737
對我而言,它不會自動評估。我有Vim 7.3.1314。 – hawk
太棒了!謝謝@Ingo Karkat! – hawk