问题 Vim - 在当前的python站点包上运行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。结果,期望的路径一直在变化。


2961
2017-07-04 19:19


起源

你在运行什么操作系统? - codeape


答案:


这应该工作:

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>

8
2017-07-04 22:49



这最终对我有用(你的第一个没有'shellescape'的解决方案):map <S-F11>:exe'!ctags -R -f ./pytags'。 system('python -c“来自distutils.sysconfig import get_python_lib; print get_python_lib()”')<CR> - ak.
请在第二个解决方案中添加尾部双引号。 - suzanshakya


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

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

3
2017-10-10 06:16



这就是我使用的,如果你使用的是virtualenv,它应该是完美的。 - Tim Fletcher
这样的事情可能更好,以便适用于任何版本的Python:$ VIRTUAL_ENV / lib / python * / site-packages - Christian Abbott


我在使用这样的命令时遇到了一些问题(取自 本文):

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

在使用python 3.6激活的virtualenv中,我的系统决定在使用上面的命令时使用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


0
2017-09-28 10:29