Configuring Vim for C++

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

  • 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


NERDTree http://www.vim.org/scripts/script.php?script_id=1658

Exuberant ctags (vim already supports the hotkeys natively) http://ctags.sourceforge.net/

taglist: http://vim-taglist.sourceforge.net/

snipmate: http://www.vim.org/scripts/script.php?script_id=2540

I don't do omnicompletion just the usual ^n ^p stuff but there are plenty of resources to google for.