在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)
问题是:如何用替代的匹配模式评估表达式?
当你使用sub-replace-expression时,正常的特殊替换类似于&并且\1不再起作用; 一切都被解释为Vimscript表达式.幸运的是,您可以访问捕获的子匹配submatches(),因此它变为:
:%s/.*/\='foo ' . submatch(0)/
Run Code Online (Sandbox Code Playgroud)