Я бы порекомендовал собрать vim для двух интерпретаторов, а затем вызывать его, используя сценарий оболочки, который я предоставил ниже, чтобы указать на конкретный virtualenv.
Мне удалось собрать vim для Python 2.7 с помощью следующей команды (2.7 устанавливается в $ HOME / root):
% LD_LIBRARY_PATH=$HOME/root/lib PATH=$HOME/root/bin:$PATH \
./configure --enable-pythoninterp \
--with-python-config-dir=$HOME/root/lib/python2.7/config \
--prefix=$HOME/vim27
% make install
% $HOME/bin/vim27
:python import sys; print sys.path[:2]
['/home/pat/root/lib/python27.zip', '/home/pat/root/lib/python2.7']
Ваш virtualenv на самом деле является тонкой оболочкой для интерпретатора Python, с которым он был создан - $HOME/foobar/lib/python2.6/config
является символической ссылкой на /usr/lib/python2.6/config
.
Так что, если вы создали его с системным интерпретатором, VIM проверит это и в конечном итоге свяжет с реальным интерпретатором, используя систему sys.path
по умолчанию, даже если configure покажет путь virtualenv:
% PATH=$HOME/foobar/bin:$PATH ./configure --enable-pythoninterp \
--with-python-config-dir=$HOME/foobar/lib/python2.6/config \
--prefix=$HOME/foobar
..
checking for python... /home/pat/foobar/bin/python
checking Python's configuration directory... (cached) /home/pat/foobar/lib/python2.6/config
..
% make install
% $HOME/foobar/bin/vim
:python import sys; print sys.path[:1]
['/usr/lib/python2.6']
Обходной путь : поскольку ваш системный vim, скорее всего, скомпилирован с вашим системным питоном, вам не нужно перестраивать vim для каждого virtualenv: вы можете просто удалить скрипт оболочки с именем vim
в своем Каталог bin для virtualenv, который расширяет PYTHONPATH перед вызовом системы vim:
Содержимое ~/HOME/foobar/bin/vim
:
#!/bin/sh
ROOT=`cd \`dirname $0\`; cd ..; pwd`
PYTHONPATH=$ROOT/lib/python2.6/site-packages /usr/bin/vim $*
Когда это вызывается, вставляется sys.path virtualenv:
% $HOME/foobar/bin/vim
:python import sys; print sys.path[:2]
['/home/pat/foobar/lib/python2.6/site-packages', '/usr/lib/python2.6']