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