我使用 vim 进行编码,尤其是 python 编码。通常我想用 python 解释器执行当前缓冲区。(例如运行单元测试),通常我这样做:!python % <Enter>
这个场景适用于全局 python,但我想运行 virtualenv python。如何在 vim 中启用 virtualenv?是否可以在运行时切换 virtualenv?
我正在使用 macvim
我使用 vim 进行编码,尤其是 python 编码。通常我想用 python 解释器执行当前缓冲区。(例如运行单元测试),通常我这样做:!python % <Enter>
这个场景适用于全局 python,但我想运行 virtualenv python。如何在 vim 中启用 virtualenv?是否可以在运行时切换 virtualenv?
我正在使用 macvim
这是我使用的(对不起,突出显示是扭曲的)。
" 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
.
希望有帮助!
编辑:只需注明出处:写这个小曲子的许多侦探工作都是由这个博主完成的,他应该得到一些赞扬。
在启动 vim 之前激活你的 virtualenv。您将自动获得相应的解释器实例。
您可以使用 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 已经加载,它将被新的覆盖。
这个问题其实困扰了我很久,直到我使用了vim-conda的插件。只需在 ~/.vimrc 中添加插件 'cjrh/vim-conda' 即可。您还可以查看详细说明https://github.com/cjrh/vim-conda。
如果由于某些原因您不想vim
在 python 虚拟环境中运行,那么您可以代替 sourcing venv/bin/activate
:
PYTHONPATH="$(source venv/bin/activate; python3 -c "import sys; print(':'.join(sys.path))"; deactivate)" vim
这也有点来源虚拟环境,但它使其与运行的环境有些分离vim
。