Vim支持Python环境变量

6

如果我在vim命令行中输入:

:python import os;print os.getenv('PYTHONPATH')

我得到了一条路径 如果我关闭vim,并在同一个终端上执行以下操作:

echo $PYTHONPATH

我得到了一个完全不同的路径,这是为什么?vim从哪里获取这个路径?这很重要,因为自动补全找不到模块,所以无法工作。我知道这一点,因为如果我再次尝试从vim命令行进行操作...
:python import django

它失败了。但如果我退出 vim 并键入:

python
>>> import django

没有任何错误显示!这是怎么回事?我正在使用virtualenv,检查了激活源,并没有更改PYTHONPATH。我尝试过不使用virtualenv,但出现了同样的问题。
更新:在编译Vim之前,我用于配置Vim源代码的命令行:
./configure --prefix=${HOME}/apps/vim73 --with-features=huge --enable-gui=gnome2 --enable-pythoninterp --enable-rubyinterp --enable-multibyte --with-python-config-dir=/usr/lib/python2.6/config

如果你在shell中输入echo $PYTHONPATH会发生什么?Python也会在sys.path之外寻找模块,也就是说你可以尝试在两种情况下进行测试并查看是否相同。 - bjarneh
在 Vim 中输入 !echo $PYTHONPATH 的结果与 getenv 函数的结果相同。但是,退出 vim 后运行 $echo $PYTHONPATH 的结果却会得到一个不同的路径。 - Guillermo Siliceo Trueba
是的,但是vim中的Python主要是为了包含一个Python接口到vim中,例如在vimrc中,这将在vim内部工作import vim,但在vim外部可能会失败。您是否只能获得可以在vim报告的PYTHONPATH中找到的模块的自动完成? - bjarneh
是的,确切地说只有Vim看到的PYTHONPATH。Vim忽略了在运行它的终端上活动的PYTHONPATH。 我不认为我编译Vim时使用的配置行与此有任何关系,但为了安全起见,我将其添加到问题中。 - Guillermo Siliceo Trueba
1个回答

4

PYTHONPATH只是一个幌子:这不是virtualenv用来配置自身的方式。Virtualenv是通过给PATH添加前缀指向替代python可执行文件的位置来工作的,从而覆盖系统python

Vim的问题在于Python嵌入不查看Python可执行文件或PATH:它查找并加载libpython库,而virtualenv不虚拟化该库。这意味着Vim始终会初始化系统Python,而不管有没有virtualenv。

然而,并不是一无所获:Vim仍然可以在其自己的Python初始化之后运行virtualenv的初始化脚本。Jeremy Cantrell编写了一个Vim插件来帮助自动化这个过程,这应该可以解决您的问题:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接