Vim - 在当前的python站点包上运行ctags

时间:2010-07-04 19:19:52

标签: python vim ctags

这就是我需要的 - 有一个密钥可以创建我的python站点包的ctags。

我有这个命令,它将打印site-packages路径:

!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>

如何将一个命令的结果插入到键绑定语句中?

我想在运行时获取site-packages路径的原因是我强烈地使用virtualenv。结果,所需的路径一直在变化。

3 个答案:

答案 0 :(得分:9)

这应该有效:

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

但是如果你的shell支持它,为什么不只是:

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

答案 1 :(得分:3)

我知道上面给出的答案有效,但我想建议一个替代方案

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

答案 2 :(得分:0)

我在使用这样的命令时遇到了一些问题(取自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)))")

在激活的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