Vim, C++, YCM, and Syntastic include path problems

SteveDeFacto picture SteveDeFacto · Aug 3, 2013 · Viewed 7.7k times · Source

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,,""

Answer

mMontu picture mMontu · Aug 5, 2013

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 the language:<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.