Vim - 在当前Python site-packages上运行ctags

14 投票
3 回答
3446 浏览
提问于 2025-04-16 00:48

我需要做的是,创建一个快捷键,可以生成我Python的site-packages目录的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

我在使用下面这个命令时遇到了一些问题(这个命令来自这篇文章):

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 时,系统却自动选择了系统默认的 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

3

我知道上面给出的答案是有效的,但我想推荐一个不同的方案。

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

这个应该可以用:

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>

撰写回答