2010-07-04 9 views
11

Esto es lo que necesito: tengo una clave que creará ctags de mis paquetes de sitio de python.Vim: ejecute ctags en los paquetes de sitio de python actuales

que tienen este comando, que imprimirá el camino site-packages:

!python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" 

Esta es la forma en que la asignación de teclas:

map <F11> :!ctags -R -f ./tags *site-packages-path-goes-here*<CR> 

¿Cómo conecto el resultado de una comando en la declaración vinculante clave?

El motivo por el que quiero obtener la ruta de paquetes de sitio en el tiempo de ejecución es que uso virtualenv de manera intensiva. Como resultado, la ruta deseada cambia todo el tiempo.

+0

¿Qué sistema operativo que se ejecuta? – codeape

Respuesta

8

Esto debería funcionar:

map <F11> :exe '!ctags -R -f ./tags ' . shellescape(system('python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"'))<CR> 

Pero si su concha lo soporta, ¿por qué no:

map <F11> :!ctags -R -f ./tags `python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()`<CR> 
+0

Esto finalmente funcionó para mí (su primera solución sin 'shellescape'): map : exe '! Ctags -R -f ./pytags'. system ('python -c' de distutils.sysconfig import get_python_lib; print get_python_lib() "')

+0

Agregue una comilla doble final en su segunda solución. – suzanshakya

3

sé la respuesta dada por encima de las obras, pero me gustaría sugerir una alternativa

map <F11> :!ctags -R -f ./tags $VIRTUAL_ENV/lib/python2.7/site-packages<CR> 
+0

Esto es lo que uso y funciona perfectamente si está usando virtualenv, que debería ser. –

+0

Algo como esto es probablemente mejor, para poder trabajar con cualquier versión de Python: $ VIRTUAL_ENV/lib/python */site-packages –

0

que he encontrado algunos problemas mientras comando utilizado como esto (tomado de this article):

ctags -R --fields=+l --languages=python --python-kinds=-iv -f ./tags $(python -c "import os, sys; print(' '.join('{}'.format(d) for d in sys.path if os.path.isdir(d)))")

en el virtualenv activado con Python 3.6 mi sistema decidió usar python-2.7 del sistema por defecto cuando se utiliza comando anterior.

Así que quiero mostrar mi solución:

python -c \"import os, sys; print(' '.join('{}'.format(d) for d in sys.path if os.path.isdir(d)) + ' ./')\" | xargs /usr/bin/ctags -R

Cuestiones relacionadas