Heim  >  Fragen und Antworten  >  Hauptteil

Problem mit ctags+VIM

Nach der Generierung mit ctags -R müssen Sie set tags=..../tags jedes Mal manuell ausführen, wenn Sie mit der VIM-Bearbeitung beginnen. Ich habe über eine Möglichkeit nachgedacht, die Tag-Datei mit ctags -f an der angegebenen Stelle abzulegen und dann set tags = ... in vimrc festzulegen. Schließlich habe ich festgestellt, dass die Tags-Datei tatsächlich gefunden werden kann, aber beim Springen. Es basiert auf der Tags-Datei. Es stammt aus dem Stammverzeichnis, nicht aus dem Projekt-Stammverzeichnis. Gibt es eine Möglichkeit, das Setzen von Tags zu vermeiden?

过去多啦不再A梦过去多啦不再A梦2712 Tage vor658

Antworte allen(2)Ich werde antworten

  • 某草草

    某草草2017-05-16 16:43:54

    你在 ctags 命令执行时指明生成的文件路径应该就好了吧。

    我是这样子设置 tags 选项的:

    set tags+=./../tags,./../../tags,./../../../tags
    

    这样在项目里不太深的话总能找到这个项目的 tags 文件。

    PS: taglist 和 tagbar 插件很好用的哦=w=

    Antwort
    0
  • 天蓬老师

    天蓬老师2017-05-16 16:43:54

    除了设置" set tags+=./../tags,./../../tags,./../../../tags外,可以尝试下面的方法(例如内核的tags实在太大,最好不要自动载入,所以不推荐在项目特别大时这么做)

    vim 自动上级目录查找递归加载ctags和cscope

    原文在此,我增加了目录层数,以及加入了GTAGS(参考GNU golbal)

    注意:我的函数里GTAGS的[pre-path] (参考:help cscope)是当前目录是:pwd的结果

    function! AutoLoadCTagsAndCScope()
        let max = 10
        let dir = './'
        let i = 0
        let break = 0
        while isdirectory(dir) && i < max
            if filereadable(dir . 'GTAGS')
                execute 'cs add ' . dir . 'GTAGS ' . glob("`pwd`")
                let break = 1
            endif
            if filereadable(dir . 'cscope.out')
                execute 'cs add ' . dir . 'cscope.out'
                let break = 1
            endif
            if filereadable(dir . 'tags')
                execute 'set tags =' . dir . 'tags'
                let break = 1
            endif
            if break == 1
                execute 'lcd ' . dir
                break
            endif
            let dir = dir . '../'
            let i = i + 1
        endwhile
    endf
    nmap <F7> :call AutoLoadCTagsAndCScope()<CR>
    " call AutoLoadCTagsAndCScope()
    " http://vifix.cn/blog/vim-auto-load-ctags-and-cscope.html
    

    Antwort
    0
  • StornierenAntwort