2010-10-07 2 views
12

Я использую vim для кодирования и для кодирования питона в частности. Часто я хочу выполнить текущий буфер с помощью интерпретатора python. (например, для запуска unittests), обычно я делаю это с помощью :!python % <Enter>Установить python virtualenv in vim

Этот сценарий будет работать отлично с глобальным python, но вместо этого я хочу запустить virtualenv python. Как включить virtualenv в vim? Можно ли включить virtualenv во время выполнения?

Я использую MacVim

ответ

15

Вот что я использую (извините, что подсветка винтовая).

" 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 

Обратите внимание, что вам нужно иметь MacVim скомпилирован против Python вы используете для virtualenv, например, если вы загрузили Python 2.7 из Python.org, вы должны перекомпилировать MacVim, используя --with-python-config-dir=/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config в качестве аргумента для ./configure.

Надеюсь, что это поможет!

EDIT: Только одна ноты атрибуции: много детективной работы, которые вошли в написании этого мало песенка была сделана this blogger, и он заслуживает часть кредита.

+0

wow, cool, вот что Я искал, спасибо большое! Я не знал, что virtualenv создает это activate_this.py –

+0

Привет, dwf, не могли бы вы взглянуть на мой вопрос здесь, чтобы понять, почему мой вывод странный? http://stackoverflow.com/questions/17288843/macvim-uses-wrong-python-virtualenv – Lionel

5

Активируйте virtualenv перед запуском Vim. Вы автоматически получите соответствующий экземпляр интерпретатора.

+0

Я использую MacVim, и я начинаю его с Dock, так что это не очень хороший вариант ... Насколько я понимаю, активизация virtualenv - это модификация PATH, PYTHONHOME и PYTHONPATH env vars, может быть, некоторые другой тоже. Я не возражаю, чтобы портировать виртуальный скрипт 'script' на vim, мне просто интересно, существует ли существующее решение. –

+0

Я нахожу, что это не работает, если virtualenv python - это другая версия из vim-скомпилированного (например, 2 vs 3) – hwjp

+0

К сожалению, для меня не работает OSX + MacVim – cmcginty

2

Существует также ВИМ плагин на GitHub:

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

Я не пробовал, но мне кажется, чтобы решить этот вопрос, а также.

+2

Я пробовал это, но он не работает на Mac OSX 10.8 (Mountain Lion) - некоторые другие проблемы возможно существует – Lionel

+0

У меня проблемы с работой с MacVim. – Chris

+1

@ Крис: Это, скорее всего, из-за [этой проблемы] (http://stackoverflow.com/questions/9853584/how-to-use-correct-ruby-in-vim-how-to-modify-path-in -vim/12146694 # 12146694). – Nolsto

0

Этот вопрос на самом деле беспокоил меня в течение длительного времени, пока я не использую плагин vim-conda. Просто добавьте плагин 'cjrh/vim-conda' в ваш ~/.vimrc, и он будет работать. Вы также можете просмотреть подробную инструкцию https://github.com/cjrh/vim-conda.