在我.vimrc
和我的 vim 插件 UltiSnips 中,我有很多看起来像这样的代码
:py << EOF
print("Hi")
EOF
现在,我想检查 python3 是否通过编译到 Vim 中has("python3")
,然后使用:py3
而不是:py
. 保持 python 代码在 python 2 和 3 之间兼容不是问题 - 问题是告诉 vim 使用 :py3 如果可用,否则使用 :py 。
有人有好主意吗?
在我.vimrc
和我的 vim 插件 UltiSnips 中,我有很多看起来像这样的代码
:py << EOF
print("Hi")
EOF
现在,我想检查 python3 是否通过编译到 Vim 中has("python3")
,然后使用:py3
而不是:py
. 保持 python 代码在 python 2 和 3 之间兼容不是问题 - 问题是告诉 vim 使用 :py3 如果可用,否则使用 :py 。
有人有好主意吗?
您可以利用 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
.
我现在以一种丑陋的方式解决了这个问题,只检查一次 python3 或 python,然后设置一个变量
let g:_uspy=":py " or ":py3 "
然后将 << EOF 语法扔到一边,而是通过调用 python 的每一行
exec g:_uspy "print('Hello')"
这似乎工作正常。请参阅此 git blob 中的完整解决方案: