18

我使用 vim 进行编码,尤其是 python 编码。通常我想用 python 解释器执行当前缓冲区。(例如运行单元测试),通常我这样做:!python % <Enter>

这个场景适用于全局 python,但我想运行 virtualenv python。如何在 vim 中启用 virtualenv?是否可以在运行时切换 virtualenv?

我正在使用 macvim

4

6 回答 6

19

这是我使用的(对不起,突出显示是扭曲的)。

" Function to activate a virtualenv in the embedded interpreter for
" omnicomplete and other things like that.
function LoadVirtualEnv(path)
    let activate_this = a:path . '/bin/activate_this.py'
    if getftype(a:path) == "dir" && filereadable(activate_this)
        python << EOF
import vim
activate_this = vim.eval('l:activate_this')
execfile(activate_this, dict(__file__=activate_this))
EOF
    endif
endfunction

" Load up a 'stable' virtualenv if one exists in ~/.virtualenv
let defaultvirtualenv = $HOME . "/.virtualenvs/stable"

" Only attempt to load this virtualenv if the defaultvirtualenv
" actually exists, and we aren't running with a virtualenv active.
if has("python")
    if empty($VIRTUAL_ENV) && getftype(defaultvirtualenv) == "dir"
        call LoadVirtualEnv(defaultvirtualenv)
    endif
endif

请注意,您需要针对您用于 virtualenv 的 Python 编译 MacVim,例如,如果您从 Python.org 下载了 Python 2.7,您应该--with-python-config-dir=/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config使用./configure.

希望有帮助!

编辑:只需注明出处:写这个小曲子的许多侦探工作都是由这个博主完成的,他应该得到一些赞扬。

于 2010-10-25T17:22:44.730 回答
18

在启动 vim 之前激活你的 virtualenv。您将自动获得相应的解释器实例。

于 2010-10-07T12:23:27.023 回答
2

github上还有一个vim插件:

https://github.com/jmcantrell/vim-virtualenv

我没有尝试过,但它似乎也解决了这个问题。

于 2013-05-11T13:39:13.730 回答
2

您可以使用 vim 的别名创建一个函数,以自动加载/卸载 virtualenv(如果它存在于您启动它的位置)。

在此示例中,它检查.venv/bin/activate.

vimVenAutoload() {
    if [ -e .venv/bin/activate ]; then
        . .venv/bin/activate;
        vim $*;
        deactivate;
    else
        vim $*;
    fi;
}
alias vim="vimVenAutoload"

您可以将此添加到您的.bashrc.bash_profile.

小警告:如果 virtualenv 已经加载,它将被新的覆盖。

于 2021-02-09T14:47:47.787 回答
0

这个问题其实困扰了我很久,直到我使用了vim-conda的插件。只需在 ~/.vimrc 中添加插件 'cjrh/vim-conda' 即可。您还可以查看详细说明https://github.com/cjrh/vim-conda

于 2018-03-06T04:48:35.170 回答
0

如果由于某些原因您不想vim在 python 虚拟环境中运行,那么您可以代替 sourcing venv/bin/activate

PYTHONPATH="$(source venv/bin/activate; python3 -c "import sys; print(':'.join(sys.path))"; deactivate)" vim

这也有点来源虚拟环境,但它使其与运行的环境有些分离vim

于 2020-12-12T16:15:02.093 回答