在vim中兼容使用:py或:py3的方式?

7 投票
2 回答
3292 浏览
提问于 2025-04-17 09:56

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

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

现在,我想检查一下 Vim 是否支持 python3,可以通过 has("python3") 来实现。如果支持的话,我就想用 :py3,如果不支持,就用 :py。这里的关键不是让 Python 2 和 3 的代码兼容,而是要告诉 Vim,如果可以用 :py3 就用它,不行的话就用 :py。

有没有人有好的主意呢?

2 个回答

0

我现在用一种不太优雅的方法解决了这个问题,方法是只检查一次是用python3还是python,然后设置一个变量。

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

接着我就不再使用<< EOF这种语法,而是通过调用每一行的python来实现。

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

这个方法似乎还不错。完整的解决方案可以在这个git链接中查看:

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

6

你可以利用这样一个事实:在vim中,用户自定义的命令其实就是一些放置模式和评估的语句。你可以这样写:

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

然后你就可以用 :Py 来运行python命令,就像你平常使用 :py:py3 一样。

撰写回答