2010-10-07 26 views
12

Utilizo vim para codificación y para python en particular. A menudo quiero ejecutar el búfer actual con el intérprete de Python. (por ejemplo, para ejecutar unittests), generalmente hago esto con :!python % <Enter>Establecer python virtualenv en vim

Esta escena funcionará bien con python global, pero quiero ejecutar virtualenv python en su lugar. ¿Cómo habilito virtualenv dentro de vim? ¿Es posible cambiar virtualenv en el tiempo de ejecución?

estoy usando MacVim

Respuesta

15

Esto es lo que uso (lo siento, el resaltado es desatinado).

" 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 

Tenga en cuenta que es necesario tener MacVim compilado con el pitón que está utilizando para el virtualenv, por ejemplo, si descargó Python 2.7 desde Python.org debe recompilar MacVim usando --with-python-config-dir=/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config como argumento para ./configure.

Espero que ayude!

EDIT: Sólo una nota de atribución: Una gran parte del trabajo de investigación, que entró en la redacción de este cancioncilla hecho por this blogger, y se merece parte del crédito.

+0

guau, genial, esto es lo Estaba buscando, muchas gracias! No sabía que virtualenv crea esto activate_this.py –

+0

Hola, dwf, ¿podrías echar un vistazo a mi pregunta aquí para ver por qué mi salida es extraña? http://stackoverflow.com/questions/17288843/macvim-uses-wrong-python-virtualenv – Lionel

5

Active su virtualenv antes de iniciar vim. Obtendrá automáticamente la instancia de intérprete correspondiente.

+0

Estoy usando MacVim, y lo inicio desde el Dock, por lo que no es realmente una buena opción ... Por lo que entiendo, activar el virtualenv tiene que ver con la modificación de los vectores de PATH, PYTHONHOME y PYTHONPATH, tal vez algunos otro también No me importa portar el 'script' activado de virtualenv a vim, solo me preguntaba si hay una solución existente. –

+0

Me parece que esto no funciona si el virtualenv python es una versión diferente de la compilada en vim (por ejemplo, 2 frente a 3) – hwjp

+0

Lo siento, no funciona para mí OSX + MacVim – cmcginty

2

También hay un plugin vim en github:

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

Yo no lo he probado, pero parece resolver la cuestión así.

+2

He intentado esto, pero parece que no funciona en Mac OSX 10.8 (Mountain Lion) - algún otro problema subyacente Tal vez exista – Lionel

+0

Tengo problemas para que funcione también con MacVim. – Chris

+1

@Chris: Esto es más probable debido a [este problema] (http://stackoverflow.com/questions/9853584/how-to-use-correct-ruby-in-vim-how-to-modify-path-in -vim/12146694 # 12146694). – Nolsto

0

este problema en realidad me molestó por mucho tiempo hasta que use el plugin de vim-conda. Simplemente agregue el complemento 'cjrh/vim-conda' en su ~/.vimrc y funcionará. También puede ver la instrucción detallada https://github.com/cjrh/vim-conda.