Vim - 在当前Python site-packages上运行ctags
我需要做的是,创建一个快捷键,可以生成我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>