在vim中,我们可以用sub-replace-expression
代替。当替换字符串以\=
开头时,余数被解释为表达式。
e.g。带文字:
bar
bar
并替换命令:
:%s/.*/\='foo \0'/
给出意想不到的结果:
foo \0
foo \0
而不是:
foo bar
foo bar
问题是:如何用替代的匹配模式评估表达式?
答案 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/