Configuring Vim for C++
I would like to make vim my C++ editor. I have very little experience working with it and need help in configuring vim to work with C++. I need such features as
- code-complete (for stl and for my classes)
- switching between .cc and .h files
- may be some more tricks you, C++ and vim gurus, have.
May be you could provide some configs (with explanations), or links to tutorials, plugins I could make use of?
Solution 1:
- Code complete: Omni completion or Clang autocomplete or YouCompleteMe
- Real time syntax checking: Syntastic
- Switching between source and header file: A plugin
- Snippets: Snipmate or UltiSnip
- Search for reference of variables, functions, classes, etc.: Cscope
- Go to definition: Ctags or part of YouCompleteMe subcommands mentioned above
- Refactoring tools: Refactor, lh-refactor
- Useful text objects: Arg text object and Class text object
- C++ category in Vim Tips wiki
- Luc Hermitte's C/C++ plugin
- Not C++ specific but I also recommend either FuzzyFinder or Command-T or Unite for file navigation. With either of these, you don't even need tabs (which does not scale for 10+ files) to manage your project.
- Class navigation: Taglist or Tagbar
Edit: Updated as of July 2013
Solution 2:
I'm using vim
as my C++ editor, however I'm not using many 'exotic' stuff.
- Regarding completion, I'm using the non-contextual
^P
and^N
. -
I have a bunch of user defined abbreviations for my C++ use, for example :
abbreviate bptr boost::shared_ptr abbreviate cstr const std::string &
-
I have several functions for "code snippets" like things, for example :
function! IncludeGuard() let basename = expand("%:t:r") let includeGuard = '__' . basename . '_h__' call append(0, "#ifndef " . includeGuard) call append(1, "#define " . includeGuard) call append(line("$"), "#endif /* !" . includeGuard . " */") endfunction
The only plugin I really couldn't live without is Command-T (which requires ruby support)
- For easy
.cc
to.h
switching, you can try this plugin