如何使用2个不同的位置为vim生成单个.ctags文件?

Tor*_*ups 2 vim ctags

我每天都在使用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)

ZyX*_*ZyX 5

你不需要.Vim能够处理多个标签文件,只需选择一个位置即可放置virtualenv标签文件,并将完整路径包含在"标签"选项中.

还有另一种可能性:阅读man ctags.通过添加一个开关,可以使ctags向现有文件添加标签.您仍然不需要将这些命令组合到一个命令中.


注意:您的代码中有一些奇怪的东西:

  1. set tags=./.ctags,.ctags;
    
    Run Code Online (Sandbox Code Playgroud)

    你真的需要.ctags;用分号包含文件吗?猜猜这是一个错字.

  2. map …
    
    Run Code Online (Sandbox Code Playgroud)

    nnoremap ….首先,这里没有你想要重新映射的东西nore.其次,命令不是从可视模式写入工作,因此我怀疑你需要它们在操作员待定模式nnore.

  3. 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)