sponsor Vim development Vim logo Vim Book Ad

OmniCppComplete : C/C++ omni-completion with ctags database

 script karma  Rating 3396/1125, Downloaded by 107679  Comments, bugs, improvements  Vim wiki

created by
Vissale NEANG
script type
This script is for vim 7.0 or higher, it provides C/C++ completion thanks to a ctags database.

If you don't want a completion based on ctags there are solutions using compiler front ends (real C++ parsing)
    - "clang" with the following script : http://www.vim.org/scripts/script.php?script_id=3302
    - "gccsense" : http://cx4a.org/software/gccsense

Features :

    -   Complete namespaces, classes, structs and union members.
    -   Complete inherited members for classes and structs (single and multiple inheritance).
    -   Complete attribute members eg: myObject->_child->_child etc...
    -   Complete type returned by a function eg: myObject->get()->_child.
    -   Complete the "this" pointer.
    -   Complete a typedef.
    -   Complete the current scope (global and class scope).
    -   Complete an object after a cast (C and C++ cast).
    -   Complete anonymous types (eg: struct {int a; int b;}g_Var; g_Var.???). It also works for a typedef of an anonymous type.

Notes :
    -   The script manage cached datas for optimization.
    -   Ambiguous namespaces are detected and are not included in the context stack.
    -   The parsed code is tokenized so you can run a completion even if the current
        instruction has bad indentation, spaces, comments or carriage returns between words
        (even if it is not realistic).

ScreenShots :

install details
1) Unzip the plugin to ~/.vim (unix) or %HOMEPATH%\vimfiles (windows)
2) Run Vim and type the following command :

:helptags $HOME/.vim/doc


:helptags $HOME/vimfiles/doc

3) Type :h omnicppcomplete and please read the installation paragraph.

rate this script Life Changing Helpful Unfulfilling 
script versions (upload new version)

Click on the package to download.

package script version date Vim version user release notes
omnicppcomplete-0.41.zip 0.41 2007-09-27 7.0 Vissale NEANG -   It's recommended to update ctags to version 5.7 or higher
-   The plugin is now activated for C files
-   New value for OmniCpp_SelectFirstItem when the option is equal to
    2 the first item is selected without inserting it to
    the text (patch from Marek Olszewski)
-   Bug when completing union members fixed with ctags 5.7
    (reported by Willem-Jan de Hoog)
-   New option OmniCpp_LocalSearchDecl (patch from Roland Kuck)
-   Bug when tags=something,,somethingelse (reported by Tobias Pflug)
-   Bug with nested structure (reported by Mikhail Daen)
-   Bug where the script fails to detect the type of a variable when
    the ignorecase option is on (reported by Alexey Vakhov)
-   Error message when trying to use completion on a not yet saved
    Vim buffer (reported by Neil Bird)
-   Error message when trying to use completion on an file opened from
    a tselect command (reported by Henrique Andrade)

omnicppcomplete.zip 0.4 2006-06-25 7.0 Vissale NEANG WARNING1: Please uninstall the previous version (remove at least autoload/cppomnicomplete.vim)
WARNING2: Option names have changed, don't forget to update your .vimrc
WARNING3: It's recommended to update ctags to the latest version (5.6)
WARNING4: Default value for OmniCpp_NamespaceSearch option is now 1

-   The script is renamed to OmniCppComplete according to the library
    script directory structure.        
-   OmniCpp_ClassScopeCompletionMethod renamed to OmniCpp_DisplayMode
-   Fixed a bug where the quickfix list is modified after a completion.
-   OmniCpp_ShowPrototypeInAbbr option added. It allows to show the
    function signature in the abbreviation.
-   OmniCpp_ShowAccess option added. It allows to hide the access
    information in the popup menu.
-   The tags database format must be a ctags 5.6 database if you want to
    complete anonymous types.
-   Fixed current scope detection not working properly in destructors.
-   Don't show protected and private members according to the current scope.
-   Overloaded functions are now filtered properly.
-   New cache system using less memory.
-   The class scope of a method is now resolved properly with "using
    namespace" declarations.
-   OmniCpp_SelectFirstItem option added. It allows to not select the first
    item in the popup menu when 'completeopt' does not contain "longest".
-   Fixed the bug where a "random" item in the popup menu is selected
    by default when 'completeopt' does not contain "longest" option.
-   The script is now split in library scripts.
-   Cache added for 'using namespace' search in included files
-   Default value for OmniCpp_NamespaceSearch is now 1 (search only in the
    current buffer).
-   Namespace search automatically disabled for C files even if
    OmniCpp_NamespaceSearch != 0.
-   To avoid linear search in tags files, the ignorecase option is now
    disabled when getting tags datas (the user setting is restored after).
-   Fixed a bug where friend functions may crash the script and also crash vim.
ip used for rating:

If you have questions or remarks about this site, visit the vimonline development pages. Please use this site responsibly.
Questions about Vim should go to the maillist. Help Bram help Uganda.