我每天都在使用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
Run Code Online (Sandbox Code Playgroud)
UPDATE
对于任何可能在将来偶然发现这个问题的人,我可以使用-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
Run Code Online (Sandbox Code Playgroud)
你不需要.Vim能够处理多个标签文件,只需选择一个位置即可放置virtualenv标签文件,并将完整路径包含在"标签"选项中.
还有另一种可能性:阅读man ctags.通过添加一个开关,可以使ctags向现有文件添加标签.您仍然不需要将这些命令组合到一个命令中.
注意:您的代码中有一些奇怪的东西:
set tags=./.ctags,.ctags;
Run Code Online (Sandbox Code Playgroud)
你真的需要.ctags;用分号包含文件吗?猜猜这是一个错字.
map …
Run Code Online (Sandbox Code Playgroud)
nnoremap ….首先,这里没有你想要重新映射的东西nore.其次,命令不是从可视模式写入工作,因此我怀疑你需要它们在操作员待定模式nnore.
exe 'silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null'
exe 'redraw!'
Run Code Online (Sandbox Code Playgroud)
你不需要:exe在都在这里,只是
silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null
redraw!
Run Code Online (Sandbox Code Playgroud)
.但您可以完全避免: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')
Run Code Online (Sandbox Code Playgroud)