7

在我.vimrc和我的 vim 插件 UltiSnips 中,我有很多看起来像这样的代码

:py << EOF
print("Hi")
EOF

现在,我想检查 python3 是否通过编译到 Vim 中has("python3"),然后使用:py3而不是:py. 保持 python 代码在 python 2 和 3 之间兼容不是问题 - 问题是告诉 vim 使用 :py3 如果可用,否则使用 :py 。

有人有好主意吗?

4

2 回答 2

6

您可以利用 vim 中用户定义的命令只是简单的 place-in-patter-and-eval 语句这一事实,并编写:

if has("python3")
    command! -nargs=1 Py py3 <args>
else
    command! -nargs=1 Py py <args>
endif

然后,您可以使用:Py与通常使用相同的方式运行 python 命令:py:py3.

于 2012-01-25T13:42:04.597 回答
0

我现在以一种丑陋的方式解决了这个问题,只检查一次 python3 或 python,然后设置一个变量

let g:_uspy=":py "   or ":py3 "

然后将 << EOF 语法扔到一边,而是通过调用 python 的每一行

exec g:_uspy "print('Hello')"

这似乎工作正常。请参阅此 git blob 中的完整解决方案:

https://github.com/SirVer/ultisnips/blob/da49b4b7c4669bc462a98c9abc71b42d43d408bc/plugin/UltiSnips.vim

于 2012-01-25T12:12:41.363 回答