5

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

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

但是内置函数的功能非常有限。要解析时间戳,我想使用这样的 python 脚本:

$ python
>>> import datetime
>>> d = 'Apr 11 2012'
>>> datetime.datetime.strptime(d, '%b %d %Y').isoformat()
'2012-04-11T00:00:00'

如何将其嵌入py-expr:s命令中?

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

谢谢!

4

1 回答 1

8

如果您至少有 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.

于 2012-11-04T17:20:04.250 回答