带有Python支持的Vim环境变量

6 投票
1 回答
4024 浏览
提问于 2025-04-17 02:44

如果我在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 个回答

4

PYTHONPATH 其实是个误导:它并不是虚拟环境(virtualenv)用来配置自己的东西。虚拟环境的工作原理是,在 PATH 前面加一个前缀,指向一个不同的 python 可执行文件,这样就可以覆盖系统自带的 python

Vim 的问题在于,它在嵌入 Python 时并不会查看 Python 可执行文件或 PATH:它会寻找并加载 libpython 库,而虚拟环境并不会虚拟化这个库。这就意味着,无论你使用什么虚拟环境,Vim 总是会初始化系统自带的 Python。

不过,事情并没有那么糟糕:Vim 仍然可以在自己的 Python 初始化之后运行虚拟环境的初始化脚本。Jeremy Cantrell 写了一个 Vim 插件来帮助自动化这个过程,这样就能解决你的问题:

撰写回答