sponsor Vim development Vim logo Vim Book Ad

vim-clang : Yet another C/C++ code completion plugin based on Clang

 script karma  Rating 58/27, Downloaded by 4670  Comments, bugs, improvements  Vim wiki

created by
Jianjun Mao
 
script type
utility
 
description
Installation
-------------
* Require executable `clang` installed.
* Put the file `plugin/clang.vim` into `~/.vim/plugin` is OK.
* [pathogen.vim][4] `cd ~/.vim/bundle; git clone https://github.com/justmao945/vim-clang.git` is recommended.


Why
---------------
I was a user of clang\_compelete and it's really a good job, but someday I found that
I must write another plugin to overcome some _drawbacks_ of it...

vim-clang VS [Rip-Rip/clang_complete][1]
---------------

1. User options can be set for different file types in vim-clang.
    
        let g:clang_c_options = '-std=gnu11'
        let g:clang_cpp_options = '-std=c++11 -stdlib=libc++'

2. vim-clang is faster than clang_complete(not use libclang).
vim-clang does not support libclang now, and I don't think it's a good idea to use cindex.py(python binding for clang) directly.
If you use clang_complete with libclang and open many C/C++ source files, you'll find that VIM eats up **hundreds** of MB RAM...
    * vim-clang caches output of clang and reuses if the completion point is not changed and without errors.
    * vim-clang only runs clang once to get completions and diagnostics.

3. vim-clang is more friendly than clang_complete.
    * vim-clang uses the preview window to show prototypes for C/C++ sources.
      Generally, C++ source has many overload functions and most of completions are very complex,
      which is not good to put this into OmniComplete popup menu.
    * vim-clang uses a split window to show the caret diagnostics from clang.
      clang_complete uses quickfix window to show diagnostics without caret, but that's not the best choice...
      Because the caret diagnostics of clang including many useful infomation.

4. vim-clang supports relative include path in .clang configuration file.
    
        proj/
        |-- .clang
        |-- include/
            |-- main.h
        |-- src/
            |-- main.c
        |-- test/
            |-- main_test.c
        
        $ cat .clang
        -I.

5. Better PCH support. vim-clang will find stdafx.h.pch automatically.

vim-clang VS [Valloric/YouCompleteMe][5]
--------------------
[YouCompleteMe][5] is more powerful than vim-clang, that has a well designed client-server
architecture to deal the memory problem in clang_complete.


Asynchronized mode [new]
--------------------
* Now vim-clang supports to call clang executable asynchronously that it won't block
vim during the completion. This is very useful if your project is large and the machine
is not very powerful to parse them in tens of milliseconds. In synchronized mode you'll
find that's too 'slow' to wait the completion...

* This mode is implemented by starting another vim process to notify the finish of the
   completion, so `+clientserver` option is required to compile the vim(generally added).

* Please note that if you start vim from a terminal, and work as the non-GUI mode, such
  as execute 'vim' to spawn the edit, default it does not act as a server. Instead, you
  can start Gvim to work as a server or you must add '--servername XXX' to force to start
  a vim server. More to see ':h clientserver'.

* Job control is used to run clang when in neovim, which is really very nice! Thank you
  [syswow][6].



Include file path completion ?
--------------------
Please use with [neocomplete][7], they can work well together.
```viml
" disable auto completion for vim-clang
let g:clang_auto = 0
" default 'longest' can not work with neocomplete
let g:clang_c_completeopt = 'menuone,preview'
let g:clang_cpp_completeopt = 'menuone,preview'

" use neocomplete
" input patterns
if !exists('g:neocomplete#force_omni_input_patterns')
  let g:neocomplete#force_omni_input_patterns = {}
endif

" for c and c++
let g:neocomplete#force_omni_input_patterns.c =
      \ '[^.[:digit:] *\t]\%(\.\|->\)\w*'
let g:neocomplete#force_omni_input_patterns.cpp =
      \ '[^.[:digit:] *\t]\%(\.\|->\)\w*\|\h\w*::\w*'
```


Options and Commands
--------------------
`:h clang.txt`

OS requirement
--------------------
Now only tested on Linux (Ubuntu/Debian) and Mac OSX


[1]: https://github.com/Rip-Rip/clang_complete
[2]: http://www.ishani.org
[3]: http://www.ishani.org/web/articles/code/clang-win32/
[4]: https://github.com/tpope/vim-pathogen
[5]: https://github.com/Valloric/YouCompleteMe
[6]: https://github.com/syswow
[7]: https://github.com/Shougo/neocomplete
 
install details
Require executable `clang` installed.

Put the file plugin/clang.vim into ~/.vim/plugin is OK.

pathogen.vim: `cd ~/.vim/bundle; git clone https://github.com/justmao945/vim-clang.git` is recommended.
 

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
vim-clang-0.5.tar.gz 0.5 2015-09-07 7.4 Jianjun Mao support CMake compile_commands.json [@c0r73x]
support for MinGW in Windows [@maxint]
vim-clang-0.4.1.tar.gz 0.4.1 2015-05-30 7.4 Jianjun Mao * Windows support [mattn]
* bug fix
vim-clang-0.4.0.tar.gz 0.4.0 2015-05-09 7.4 Jianjun Mao * improve job control for neovim [syswow]
* support auto-close diagnostics window when leave
* support syntax check when save source file
* support neocomplete for header files completion
* support clang-format
vim-clang-0.3.0.tar.gz 0.3.0 2015-04-30 7.4 Jianjun Mao * support job control for neovim [@syswow]
* no need to write source file to disk before completion [@mlen]
* fix init plugin when create new file
* bug fix
vim-clang-0.2.8.tar.gz 0.2.8 2015-03-18 7.4 Jianjun Mao * bug fix on var set and restore
* refactor DiagnosticsWindowClose
vim-clang-0.2.7.tar.gz 0.2.7 2015-02-16 7.3 Jianjun Mao fix restore global vars when call ClangComplete
vim-clang-0.2.6.tar.gz 0.2.6 2014-12-09 7.3 Jianjun Mao * import include path from &path  [thawk]
* do not initialize plugin for non readable files [jreybert]
* fix "can't remove clang warning #16" issue [jreybert]
* add an option to load vim-clang only if .clang file is found [jreybert]
vim-clang-0.2.5.tar.gz 0.2.5 2014-08-31 7.0 Jianjun Mao update doc
vim-clang.tar.gz 0.2.4 2014-04-24 7.0 Jianjun Mao * fix ClangGenPCHFromFile
* fix ClangCompleteInit
vim-clang.tar.gz 1.0 2014-04-17 7.0 Jianjun Mao Initial upload
ip used for rating: 18.226.169.94

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.
   
Vim at Github