After generating with ctags -R, you must manually execute set tags=..../tags every time you enter VIM editing. I thought of a way to use ctags -f to put the tags file in the specified place, and then set set tags=.... in vimrc. Finally, I found that the tags file can indeed be found, but when jumping, it is based on the tags file. It comes from the root directory, not the project root directory. Is there any way to avoid setting tags every time?
某草草2017-05-16 16:43:54
You should just specify the generated file path when executing the ctags command.
This is how I set the tags
options:
set tags+=./../tags,./../../tags,./../../../tags
In this way, if you are not too deep in the project, you can always find the tags file of this project.
PS: taglist and tagbar plug-ins are very useful =w=
天蓬老师2017-05-16 16:43:54
In addition to setting " set tags+=./../tags,./../../tags,./../../../tags
, you can try the following methods (for example, if the kernel tags are too large, it is best not to load them automatically, so it is not recommended to do this when the project is particularly large)
The original text is here, I increased the number of directory levels and added GTAGS (refer to GNU golbal)
Note: The [pre-path] of GTAGS in my function (reference: help cscope) is the result of the current directory being
: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