Vim - запускать ctags для текущих пакетов сайтов Python - PullRequest
13 голосов
/ 04 июля 2010

Это то, что мне нужно - иметь ключ, который будет создавать ctags моих пакетов сайта python.

У меня есть команда, которая будет печатать путь к пакетам сайта:

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

Вот как я в раскладке клавиш:

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

Как мне вставить результат одной команды в оператор привязки клавиш?

Причина, по которой я хочу получить путь к пакетам сайта во время выполнения, заключается в том, что я интенсивно использую virtualenv. В результате нужный путь все время меняется.

Ответы [ 3 ]

9 голосов
/ 05 июля 2010

Это должно работать:

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

Но если ваша оболочка поддерживает это, почему бы просто:

map <F11> :!ctags -R -f ./tags `python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()`<CR>
3 голосов
/ 10 октября 2012

Я знаю, что ответ, приведенный выше, работает, но я бы хотел предложить альтернативу

map <F11> :!ctags -R -f ./tags $VIRTUAL_ENV/lib/python2.7/site-packages<CR>
0 голосов
/ 28 сентября 2017

Я столкнулся с некоторыми проблемами при использовании такой команды (взято из этой статьи ):

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)))")

в активированном virtualenv с python 3.6 моя система решила использовать системный по умолчанию python 2.7 при использовании команды выше.

Итак, я хочу показать вам свое решение:

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

...