Vim:如何强制 Python3 超过 Python2

Vim: How to force Python3 over Python2

我使用的 Vim 是用 +python/dyn+python3/dyn1 编译的。我不再使用 Python2,也不希望 Vim 使用 Python2,但它似乎在 Python3 之前找到 Python2 并改为使用它。

我在其他地方读到,如果在我的 .vimrc 的顶部,我包括:

if has('python3')
endif

然后 Vim 将使用 Python3。不幸的是,这不是我的经验。当我在 .vimrc 的顶部包含它时,Vim 仍然首先找到 Python2,因此忽略了 Python3.


1 我对 gui 和命令行都使用预编译的 MacVim

问题

Vim关于Python2.x和3.x接口的问题是它只能使用其中之一:

  • 第一次使用 :python 会阻止进一步使用 :python3,
  • 并且首次使用 :python3 会阻止进一步使用 :python

黑客

has('python3') 应该加载 3.x 接口作为副作用,所以 hack 的要点是,如果在初始化过程的早期完成,以确保 3.x 界面首先加载。它与 :py3 ... 之类的操作本质上是一样的:它所做的只是使 :py 无法使用。

MacVim特别

MacVim 未构建 python python3 功能,因此 has('python')has('python3')将永远 return 0.

相反,你有python_dynamicpython3_dynamic,可以用同样的方法测试:

if has('python3_dynamic')
endif

但这有一些问题:

  • has('python3_dynamic') 没有与 has('python3') 相同的副作用,所以 hack 不会起作用,
  • has('python3_dynamic')has('python_dynamic') 将始终为真,因为它们测试的功能始终存在。

现实检查

在任何情况下,:python 系列命令 总是 使用 Python 2.x 所以,如果您尝试使用 Python 3.x 和 :py 你现在可以把毛巾扔在这里,因为 Python 3.x 只能通过 :python3 和 [=34= 使用] 命令系列。

黑客攻击和妥协

如果您只想确保 :py3 和好友可用,一种方法是执行以下操作:

py3 print()

靠近 vimrc 的顶部,这将提前加载 3.x 界面,从而阻止进一步加载 2.x 界面,从而破坏 :py和朋友。

另一种方法是将 :pythonx 系列命令与 3.x 接口一起使用:

set pyxversion=3

有关详细信息,请参阅 :help python-2-and-3