【问题标题】:Vim with python support enviromental variablesVim 与 python 支持环境变量
【发布时间】:2011-11-21 14:21:01
【问题描述】:

如果我在 vim 命令行中输入

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

我得到了一条路径 如果我关闭 vim 并在同一个终端上做

echo $PYTHONPATH

我得到了另一个完全不同的路径 这是为什么,vim从哪里得到这条路? 这是相关的,因为自动完成无法找到模块,因此它不起作用。 我知道这一点,因为如果我尝试,再次从 vim cli

:python import django

失败了 但是如果我退出 vim 并输入

python
>>> import django

没有显示错误! 这里发生了什么? 我正在使用 virtualenv 并且我检查了激活源并且没有更改 PYTHONPATH。 我在没有 virtualenv 的情况下尝试了这个,同样的问题。

更新: 我在编译之前用于配置 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 中查找 PYTHONPATH 之外的模块,也就是说,您可以尝试在这两种情况下进行测试,看看是否相同
  • Vim 内部 !echo $PYTHONPATH 与 getenv 的结果相同,退出 vim 并执行 $echo $PYTHONPATH 会给出不同的路径。
  • 是的,但是 vim 中的 python 主要是包含一个到 vim 的 Python 接口,例如,在 vimrc 中,这可能会在 vim import vim 中工作,但它可能会在 vim 之外失败。您是否仅对 vim 报告的 PYTHONPATH 中可以找到的模块进行自动补全?
  • 是的,仅在 Vim 看到的 PYTHONPATH 上。 Vim 忽略了运行它的终端上活动的 PYTHONPATH。我不认为我在编译 vim 时使用的配置行与它有任何关系,但我将它添加到问题中是为了更好地衡量。

标签: python vim autocomplete omnicomplete


【解决方案1】:

PYTHONPATH 是一个红鲱鱼:这不是 virtualenv 用来配置自己的东西。 virtualenv 通过向PATH 添加一个前缀来工作,该前缀指向备用python 可执行文件的位置,覆盖系统python

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

但是,一切都没有丢失:Vim 在自己的 Python 初始化之后仍然可以运行 virtualenv 的初始化脚本。 Jeremy Cantrell 编写了一个 Vim 插件来帮助自动执行此操作,这应该可以解决您的问题:

【讨论】:

    猜你喜欢
    • 2014-05-26
    • 2017-04-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多