vim - 在'replace'表达式中调用函数

ped*_*rro 13 vim

我知道你可以在vim搜索/替换操作中调用一个函数.例如:

%s/regex/\=localtime()/g
Run Code Online (Sandbox Code Playgroud)

将使用当前纪元时间替换匹配"正则表达式"的任何内容.问题是,我无法在'replace'表达式中添加任何其他内容.例如:

%s/regex/epoch: \=localtime()/g
Run Code Online (Sandbox Code Playgroud)

不再将'localtime'视为一种功能.相反,它只是在替换文本中将'epoch:= localtime()'打印为字符串.目的是打印'epoch:1353085984'.

有没有办法从替换表达式的任意部分内调用函数?

Ing*_*kat 15

一旦使用replace-expression,它必须是整个替换.您可以在表达式中使用字符串连接(并通过submatch(1)代替而引用捕获的元素\1),如下所示:

:%s/regex/\='epoch: ' . localtime()/g
Run Code Online (Sandbox Code Playgroud)