I want to be able to start up vim in an arbitrary subdirectory in my project and have it search up to the project root for the tags
file, and then to search in an unrelated directory outside the project tree.
For example let's say I have the following:
~/projects/foo/bar/baz.c
~/projects/foo/tags
~/some/arbitrary/path/tags
I want to open baz.c
from within the bar
subdirectory, have it search up to find foo/tags
and then to search some/arbitrary/path/tags
if the symbol isn't found in foo/tags
.
Now I know I can do:
set tags=./tags,tags;
to accomplish the first task. It's apparently the semicolon which tells vim to search up to the root. However neither of the following work:
set tags=./tags,tags,~/some/arbitrary/path/tags;
set tags=./tags,tags;~/some/arbitrary/path/tags
The first one finds only symbols from ~/some/arbitrary/path/tags
while the second one only finds symbols in the tags file at the project root.
Anyone know how to do this? I'm on Linux buy the way.
I use:
set tags=~/.tags
set tags+=~/.vim/tags/cpp
set tags+=~/src/git/gitsrc/tags
" and so on...
For generating tags in a particular project's root:
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>
I adapted this setup from the C++ code completion vim tip.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With