维姆:如何将Python3强加于Python2

2024-10-03 04:34:38 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

if has('python3')
endif

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


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


Tags: 命令行if地方guivimvimrcpython3经历
1条回答
网友
1楼 · 发布于 2024-10-03 04:34:38

问题

Vim在Python2.x和3.x接口上的问题是,它只能使用其中一个:

  • 第一次使用:python会阻止进一步使用:python3
  • 而且:python3的首次使用阻止了:python的进一步使用

黑客

has('python3')应该作为副作用加载3.x接口,因此,如果在初始化过程中很早就进行了攻击,那么攻击的重点是确保首先加载3.x接口。它本质上与执行类似:py3 ...的操作相同:它所做的只是使:py不可用

麦克维姆很特别

MacVim不是用pythonpython3特性构建的,因此has('python')has('python3')将始终返回0

相反,您有python_dynamicpython3_dynamic,它们可以用相同的方法进行测试:

if has('python3_dynamic')
endif

但这有几个问题:

  • has('python3_dynamic')没有与{}相同的副作用,所以黑客无法工作
  • has('python3_dynamic')has('python_dynamic')将始终为真,因为它们测试的是始终存在的特性

现实检查

在任何情况下,:python系列的命令总是使用Python2.x,因此,如果您试图将Python3.x与:py一起使用,您可以立即停止使用,因为Python3.x只能通过:python3:pythonx系列命令使用

黑客和妥协

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

py3 print()

靠近vimrc的顶部,这将提前加载3.x接口,从而阻止进一步加载2.x接口,从而中断:py和朋友

另一种方法是在3.x接口上使用:pythonx系列命令:

set pyxversion=3

有关更多信息,请参见:help python-2-and-3

相关问题 更多 >