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

如何使用2个不同的位置为vim生成单个.ctags文件?,vim,ctags,Vim,Ctags,我每天都在使用python,需要有一个本地项目和在virtualenv中找到的每个python模块/egg的索引 下面是我希望看到改进的半工作版本。目前,我可以在redraw命令之前执行一个或另一个操作。通过这种方法,我最终在我所处理的每个项目的根目录中都有一个.ctags文件,vim意识到通过类名/方法名/等快速方便地进行任何查找 有没有一种方法可以将这两个exe行合并成一行,而只生成一个索引文件 先谢谢你 set tags=./.ctags,.ctags; " re-index the c

我每天都在使用python,需要有一个本地项目和在virtualenv中找到的每个python模块/egg的索引

下面是我希望看到改进的半工作版本。目前,我可以在redraw命令之前执行一个或另一个操作。通过这种方法,我最终在我所处理的每个项目的根目录中都有一个.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

你不需要。Vim能够处理多个标记文件,只需选择一个位置放置virtualenv标记文件,并将其完整路径包含在“标记”选项中

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


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

  • 你真的需要包括
    .ctag带分号的文件?我猜这是个打字错误

  • nnoremap…
    。首先,这里没有您想要重新映射的内容,因此
    nore
    。其次,命令不是为了在可视模式下工作而编写的,我怀疑在操作员挂起模式下是否需要它们,因此
    nnore

  • 这里根本不需要
    :exe
    ,只要

    silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null
    redraw!
    
    。但是你可以完全避免重画system()进行编码>:


  • 这些评论对linux和OSX都友好吗?如上图所示,我发现呼叫系统建议在Ubuntu 12.04上不起作用。我白天在Ubuntu上使用vim文件,晚上在OSX上使用vim文件,所以我更喜欢两者都能使用的东西。此外,我仍然看到“最后一个获胜”的行为,即项目的底部CTAG仍然存在,但我的virtualenv索引(第一个被调用的索引)消失。看起来,在第二个CTAG上添加-a标志将允许我在一个CTAG文件中保留这两个索引ctags-a-Rf.ctags…“@ToranBillups我不知道什么时候
    工作,等效的
    调用系统()
    调用不工作。第一行在我的系统(GentooLinux)上运行。注意:
    system()
    并没有扩展一些东西,如
    %
    35;
    。根本不是交易:0。我在这里看不到特价商品。1.您无法可靠地使用这些特殊功能(包含特殊字符的名称在使用
    %
    扩展时会中断调用,但在显式使用
    shellescape()
    时不会中断调用)。@ToranBillups我的意思是,第一行
    调用系统()
    。要确定CTAG是否成功退出,请使用
    v:shell\u error
    set tags=./.ctags,.ctags;
    
    map …
    
    exe 'silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null'
    exe 'redraw!'
    
    silent !ctags -Rf .ctags --extra=+f --exclude=.git --languages=-javascript 2>/dev/null
    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')