Vim - запуск ctags на текущих сайтах python

Это то, что мне нужно - иметь ключ, который будет создавать 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. В результате желаемый путь изменяется все время.

Ответ 1

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

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>

Ответ 2

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

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

Ответ 3

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

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 моя система решила использовать system-default 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