带有Python支持的Vim环境变量
如果我在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
1 个回答
PYTHONPATH
其实是个误导:它并不是虚拟环境(virtualenv)用来配置自己的东西。虚拟环境的工作原理是,在 PATH
前面加一个前缀,指向一个不同的 python
可执行文件,这样就可以覆盖系统自带的 python
。
Vim 的问题在于,它在嵌入 Python 时并不会查看 Python 可执行文件或 PATH
:它会寻找并加载 libpython
库,而虚拟环境并不会虚拟化这个库。这就意味着,无论你使用什么虚拟环境,Vim 总是会初始化系统自带的 Python。
不过,事情并没有那么糟糕:Vim 仍然可以在自己的 Python 初始化之后运行虚拟环境的初始化脚本。Jeremy Cantrell 写了一个 Vim 插件来帮助自动化这个过程,这样就能解决你的问题: