转自:http://design.liberta.co.za/articles/code-completion-intellisense-for-cpp-in-vim-with-omnicppcomplete/
C++ autocompletion is possible with VIM.
This is officially the coolest tech discovery I’ve made this year.
And it’s easy to setup.
Here’s how to configure C++ IntelliSense for Vim, with an example that demonstrates how to enable code completion for the the C++ Standard Template Library (STL) .
You need the following:
Vim Exuberant Ctags OmniCppCompleteWith Ubuntu 8.10 you can install Vim and Exuberant Ctags like so:
sudo apt-get install vim exuberant-ctags
Install OmniCppComplete by downloading the plugin and extracting it to your Vim settings (~/.vim/ ) folder.
Then open Vim, and type the following:
:helptags $HOME/.vim/doc
Add the following to your .vimrc file (you only need the required and ctags sections, but I included options I found useful – hack as you please):
" --- OmniCppComplete --- " -- required -- set nocp " non vi compatible mode filetype plugin on " enable plugins" -- optional -- " auto close options when exiting insert mode autocmd InsertLeave * if pumvisible() == 0|pclose|endif set completeopt=menu,menuone
" -- configs -- let OmniCpp_MayCompleteDot = 1 " autocomplete with . let OmniCpp_MayCompleteArrow = 1 " autocomplete with -> let OmniCpp_MayCompleteScope = 1 " autocomplete with :: let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert) let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype (i.e. parameters) in popup window
" -- ctags -- " map <ctrl>+F12 to generate ctags for current folder: map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> " add current directory's generated tags file to available tags set tags+=./tags
To generate the ctags and enable code completion for the code you are currently working on (everything in your current working directory and its sub-directories), you can simply hit CTRL+F12.
To understand how this works, check out the key-binding you enabled in your .vimrc file in step 3 of this tutorial.
To enable code completion for an external library, you need to:
Do pre-processing on the library (if needed).Generate a ctags file for the library.Tell Vim where to find the ctags file.I will demonstrate using the Standard Template Library (STL) as an example.
Start by downloading the STL source and extracting it somewhere meaningful (e.g. /usr/local/lib/stl3.3 ).
For most libraries you can skip the first step, but some libraries (like the STL) will need a little pre-processing because of the complexity introduced by macros.
Change to the directory where you extracted the STL source, and run the following:
$ find . -name '*.h' | xargs sed -i 's/__STL_BEGIN_NAMESPACE/namespace std {/' $ find . -name '*.h' | xargs sed -i 's/__STL_END_NAMESPACE/}/'
Now we’re ready to generate the ctags. In the directory where you extracted the STL source, run:
$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q ./
This will create a file called ‘tags’ in the current directory. Rename and move the file somewhere meaningful, e.g.:
$ mkdir ~/.myTags $ mv tags ~/.myTags/std3.3.tags
Lastly, tell Vim where to find the tags by adding the following to your .vimrc file:
set tags+=~/.myTags/std3.3.tags
And voila.
Tags: autocompletion , C++ , code completion , IntelliSense , Linux , omnicppcomplete , UNIX , vim
This entry was posted on Friday, March 20th, 2009 at 12:23 pm and is filed under Linux , Software Development . You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response , or trackback from your own site.