我每天都在使用 python,需要有我的本地项目和在我的 virtualenv 中找到的每个 python 模块/egg 的索引
以下是我希望改进的半工作版本。目前我可以在重绘命令之前做一个或另一个。通过这种方法,我最终在我工作的每个项目的根目录中都有一个 .ctags 文件,并且 vim 知道可以快速轻松地按类名/方法名/等进行任何查找。
有没有办法将这 2 行 exe 组合成一行,仍然只产生一个索引文件?
提前谢谢你
set tags=./.ctags,.ctags;
" re-index the ctags file
map <leader>ri :call RenewTagsFile()<cr>
" search through the indexed ctags file for any class/method/etc
map <leader>fs :FufTag<CR>
function! RenewTagsFile()
exe 'silent !ctags -Rf .ctags ' . system('python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"')''
exe 'silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null'
exe 'redraw!'
endfunction
更新
对于将来可能偶然发现这个问题的任何人,我可以使用 -a 标志进行追加(因此更新标签文件功能看起来像这样)
function! RenewTagsFile()
exe 'silent !ctags -Rf .ctags ' . system('python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"')''
exe 'silent !ctags -a -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null'
exe 'redraw!'
endfunction
最佳答案
你不需要。 Vim 能够处理多个标签文件,只需选择一个位置来放置 virtualenv 标签文件,并将它的完整路径包含在 'tags' 选项中。
还有另一种可能性:阅读 man ctags
。通过添加一个开关,可以使 ctags 将标签添加到现有文件中。您仍然不需要将这些命令合并为一个命令。
注意:你的代码中有一些奇怪的东西:
-
set tags=./.ctags,.ctags;
你真的需要用分号包含
.ctags;
文件吗?估计是打错了。 -
map …
nnoremap …
。首先,这里没有您想要重新映射的内容,因此nore
。其次,命令不是为在可视模式下工作而编写的,我怀疑您是否需要在运算符(operator)挂起模式下使用它们,因此nnore
。 -
exe 'silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null' exe 'redraw!'
这里根本不需要
:exe
,只是silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null redraw!
.但是你可以通过使用
system()
完全避免:redraw!
:call system('ctags -Rf .ctags ' . system('python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"')) call system('ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null')
关于vim - 如何使用 2 个不同的位置为 vim 生成单个 .ctags 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12453001/