如何将python表达式嵌入到vim中的:s命令中?

如何将python表达式嵌入到vim中的:s命令中?,python,vim,Python,Vim,我可以在:s命令中使用\=expr。例如,要就地转换时间戳格式: :%s/\v<\d{10}>/\=strftime('%c', submatch(0))/g 如何将此py expr嵌入到:s命令中 :%s/\v\w+ \d{2} \d{4}/\={?py-expr?}/g 谢谢 如果您至少有vim-7.3.569,则可以执行以下操作: :python import datetime :%s/\v\w+\ \d{2}\ \d{4}/\=pyeval('datetime.date

我可以在
:s
命令中使用
\=expr
。例如,要就地转换时间戳格式:

:%s/\v<\d{10}>/\=strftime('%c', submatch(0))/g

如何将此
py expr
嵌入到
:s
命令中

:%s/\v\w+ \d{2} \d{4}/\={?py-expr?}/g

谢谢

如果您至少有vim-7.3.569,则可以执行以下操作:

:python import datetime
:%s/\v\w+\ \d{2}\ \d{4}/\=pyeval('datetime.datetime.strptime(vim.eval("submatch(0)"), "%b %d %Y").isoformat()')/g
。如果您没有最新的vim,您可以在本例中模拟pyeval:

function Pyeval(expr)
    python import json
    python vim.command('return '+json.dumps(eval(vim.eval('a:expr'))))
endfunction

,然后将上述代码中的
pyeval
替换为
pyeval

注意:如果您相信vim doc,则空格可能具有特殊含义,因此需要在非常神奇的模式下转义。在这种模式下,只有0-9、a-z、a-z和uuASCII字符明确表示没有特殊意义。
function Pyeval(expr)
    python import json
    python vim.command('return '+json.dumps(eval(vim.eval('a:expr'))))
endfunction