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