我每天都在使用python,需要拥有我的本地项目和我的virtualenv中找到的每个python模块/ egg的索引
以下是我希望改进的半工作版本。目前我可以在重绘命令之前执行一个或另一个。使用这种方法,我最终在我工作的每个项目的根目录中都有一个.ctags文件,vim知道通过类名/方法名称/等进行任何快速简单的查找。
有没有办法将这两个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
答案 0 :(得分:5)
你不需要。 Vim能够处理多个标签文件,只需选择一个位置即可放置virtualenv标签文件,并在其中包含“标签”选项的完整路径。
还有另一种可能性:阅读man ctags
。通过添加一个开关,可以使ctags向现有文件添加标签。您仍然不需要将这些命令组合成一个命令。
注意:代码中有一些奇怪的东西:
set tags=./.ctags,.ctags;
你真的需要用分号包含.ctags;
文件吗?猜猜这是一个错字。
map …
nnoremap …
。首先,这里没有你想重新映射的nore
。其次,命令不是从可视模式编写的,我怀疑你是否需要它们在操作员待定模式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!
。但是,您可以使用:redraw!
完全避免system()
:
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')