Ⅰ. 插件描述
Yet another C/C++ code completion plugin based on ClangⅡ. 基本信息
|
Ⅲ. 安装方法
使用Vundle管理器安装
在你的.vimrc下添加:Plugin '/vim-clang-it-has-you'
… 然后在Vim中运行以下命令:
:source %
:PluginInstall
对于Vundle版本 < 0.10.2,请用上面的Bundle替换Plugin。
使用NeoBundle管理器安装
在你的.vimrc下添加:NeoBundle '/vim-clang-it-has-you'
… 然后在Vim中运行以下命令:
:source %
:NeoBundleInstall
使用VimPlug管理器安装
在你的.vimrc下添加:Plug '/vim-clang-it-has-you'
… 然后在Vim中运行以下命令:
:source %
:PlugInstall
使用Pathogen管理器安装
在终端中运行以下命令:cd ~/.vim/bundle
git clone https://github.com/vim-scripts/vim-clang
Ⅳ. 文档说明
Installation
- Require executable
clanginstalled. - Put the file
plugin/clang.viminto~/.vim/pluginis OK. - pathogen.vim
cd ~/.vim/bundle; git clone https://github.com/justmao945/vim-clang.gitis 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
- 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++'
- 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.
- 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.
- 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.
- Better PCH support. vim-clang will find stdafx.h.pch automatically.
vim-clang VS Valloric/YouCompleteMe
YouCompleteMe 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
- 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+clientserveroption 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.
Include file path completion ?
Please use with neocomplete, they can work well together.
" 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