2010-07-04 12 views
11

C'est ce dont j'ai besoin - avoir une clé qui va créer des ctags de mes paquets de sites python.Vim - lance les ctags sur les paquets de site python actuels

J'ai cette commande, qui imprimera le site-packages chemin:

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

Voilà comment je la cartographie clé:

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

Comment puis-je brancher dans le résultat d'un commande dans la déclaration de liaison de clé?

La raison pour laquelle je veux obtenir le chemin du paquet de site au moment de l'exécution est que j'utilise virtualenv intensivement. En conséquence, le chemin souhaité change tout le temps.

+0

Quel système d'exploitation utilisez-vous? – codeape

Répondre

8

Cela devrait fonctionner:

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

Mais si votre shell soutient, pourquoi pas seulement:

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

Cela a finalement fonctionné pour moi (votre première solution sans 'shellescape'): carte : exe '! Ctags -R -f ./pytags'. system ('python -c' de distutils.sysconfig import get_python_lib; print get_python_lib() "')

+0

Veuillez ajouter un double guillemet dans votre deuxième solution. – suzanshakya

3

Je sais que la réponse donnée ci-dessus fonctionne, mais je voudrais proposer une alternative

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

C'est ce que j'utilise et cela fonctionne parfaitement si vous utilisez virtualenv, ce que vous devriez être. –

+0

Quelque chose comme ceci est probablement mieux, afin de travailler avec n'importe quelle version de Python: $ VIRTUAL_ENV/lib/python */site-packages –

0

J'ai rencontré quelques problèmes alors que la commande utilisée comme celui-ci (prise 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)))")

dans le activé virtualenv avec Python 3.6 mon système a décidé d'utiliser la commande 2.7 lorsqu'il est utilisé python-système par défaut ci-dessus.

Je veux vous montrer ma solution:

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