用表达式和匹配模式替换

时间:2014-01-10 07:16:57

标签: vim

在vim中,我们可以用sub-replace-expression代替。当替换字符串以\=开头时,余数被解释为表达式。

e.g。带文字:

bar
bar

并替换命令:

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

给出意想不到的结果:

foo \0
foo \0

而不是:

foo bar
foo bar

问题是:如何用替代的匹配模式评估表达式?

3 个答案:

答案 0 :(得分:7)

当您使用 sub-replace-expression 时,&\1等常规特殊替换不再有效;一切都被解释为Vimscript表达式。幸运的是,您可以使用submatches()访问捕获的子匹配,因此它变为:

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

答案 1 :(得分:1)

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

使用:%s/.*/\='foo \0'/评估'foo \0',但这是一个字符串,它会自行评估。

答案 2 :(得分:0)

您不需要为此评估任何表达式,使用正则表达式组和正确的转义

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