More Useful ViM Tags

March 04, 2009 at 08:35 PM | categories: tips, vim | View Comments

Frequently, I find myself writing C code that requires the use of struct ifreq. There are plenty of fields there and of course there are other structures that I never remember. I could always look in the headers, but it ends up being a good amount of digging before I find the real definition and all its accompanying pieces. So, I decided to let ctags and ViM do the work for me. I created ~/bin/update_local_tags with the following contents:

#!/bin/sh
[ -d ~/.localtags ] || mkdir ~/.localtags
ctags -f ~/.localtags/usrinclude.ctags --exclude=vector\*.hpp -R /usr/include >/dev/null 2>&1

Then I created ~/.vim/ftplugin/c.vim with the following contents:

setlocal tags+=$HOME/.localtags/usrinclude.ctags

For good measure I copied c.vim to cpp.vim so it would be loaded for C++ file types also.

Now I just have to run update_local_tags to generate a tag file for everything in /usr/include and ViM automatically includes that list whenever I edit a C or C++ file. Updating the tags file is still a manual process, I should probably attempt to hook it into apt. Observant readers will have noticed that I exclude vector*.hpp when generating the tags. Boost includes a few generated header files that match this pattern and swell the tag file to almost 750 MiB.

blog comments powered by Disqus