用表达式和匹配模式替换

haw*_*awk 3 vim

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

例如,带文字:

bar
bar
Run Code Online (Sandbox Code Playgroud)

和替换命令:

:%s/.*/\='foo \0'/
Run Code Online (Sandbox Code Playgroud)

出乎意料的结果:

foo \0
foo \0
Run Code Online (Sandbox Code Playgroud)

代替:

foo bar
foo bar
Run Code Online (Sandbox Code Playgroud)

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

Ing*_*kat 7

当你使用sub-replace-expression时,正常的特殊替换类似于&并且\1不再起作用; 一切都被解释为Vimscript表达式.幸运的是,您可以访问捕获的子匹配submatches(),因此它变为:

:%s/.*/\='foo ' . submatch(0)/
Run Code Online (Sandbox Code Playgroud)