在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