ctags+VIM的问题

浏览:36日期:2023-07-27

问题描述

用ctags -R生成后, 每次进入VIM编辑都要手动执行一次set tags=..../tags, 想了个办法 用ctags -f 把tags文件放到指定的地方,然后在vimrc中设置set tags=.... ,最后发现确实能发现tags文件, 但是在跳转的时候,是根据tags文件为根目录来的,不是项目根目录,有什么办法可以不每次都set tags呢?

问题解答

回答1:

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

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

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

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

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

回答2:

除了设置' 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 < maxif filereadable(dir . ’GTAGS’) execute ’cs add ’ . dir . ’GTAGS ’ . glob('`pwd`') let break = 1endifif filereadable(dir . ’cscope.out’) execute ’cs add ’ . dir . ’cscope.out’ let break = 1endifif filereadable(dir . ’tags’) execute ’set tags =’ . dir . ’tags’ let break = 1endifif break == 1 execute ’lcd ’ . dir breakendiflet dir = dir . ’../’let i = i + 1 endwhileendfnmap <F7> :call AutoLoadCTagsAndCScope()<CR>' call AutoLoadCTagsAndCScope()' http://vifix.cn/blog/vim-auto-load-ctags-and-cscope.html

相关文章: