I feel that I have an awesome setup for C++ programming using Vim but I can't find a way to tell Vim, YCM, and Syntastic where to search for headers. It would be really annoying to have to manually set the include path variables for Vim, YCM, and Syntastic every time I want to work on a project when this information exists in the Makefile. Is there any automated solutions for setting a global include path?
Edit: It won't even find the headers if I set the path like this ":set path = ".,/usr/include,include,../include,/home/steven/ovgl/include,,""
the syntastic or YCM always show it can NOT find common.h and debug.h, other head files are OK.
I solved it by following the below steps: Ctags -R --fields=+l * in your project/code base. Note: You should start vim in the directory with the tags present in it. Or you may need to explicitly specify the directory where the tags are present.
Note: You should start vim in the directory with the tags present in it. Or you may need to explicitly specify the directory where the tags are present. Thanks for contributing an answer to Stack Overflow!
Your headers should appear in your tag files (see :h tags if you don't know about it).
Then YouCompleteMe
is able to read the information about your headers from the tag file, as explained in the plugin faq:
YCM does not read identifiers from my tags files
First, put
let g:ycm_collect_identifiers_from_tags_files = 1
in your vimrc.Make sure you are using Exuberant Ctags to produce your tags files since the only supported tag format is the Exuberant Ctags format. The format from "plain" ctags is NOT supported. The output of ctags --version should list "Exuberant Ctags".
Ctags needs to be called with the
--fields=+l
(that's a lowercase L, not a one) option because YCM needs thelanguage:<lang>
field in the tags output.NOTE: Mac OS X comes with "plain" ctags installed by default. brew install ctags will get you the Exuberant Ctags version.
Also make sure that your Vim tags option is set correctly. See
:h 'tags'
for details. If you want to see which tag files YCM will read for a given buffer, run:echo tagfiles()
with the relevant buffer active. Note that that function will only list tag files that already exist.
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