ctags+VIM的問題
过去多啦不再A梦
过去多啦不再A梦 2017-05-16 16:41:54
0
2
715

用ctags -R產生後, 每次進入VIM編輯都要手動執行一次set tags=..../tags, 想了個辦法用ctags -f 把tags文件放到指定的地方,然後在vimrc中設置set tags=.... ,最後發現確實能發現tags文件, 但是在跳轉的時候,是根據tags文件為根目錄來的,不是專案根目錄,有什麼辦法可以不每次都set tags呢?

过去多啦不再A梦
过去多啦不再A梦

全部回覆(2)
某草草

你在 ctags 指令執行時指明產生的檔案路徑應該就好了吧。

我是這樣子設定 tags 選項的:

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

這樣在專案裡不太深的話總是能找到這個專案的 tags 檔案。

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

Peter_Zhu

除了設定" 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板