使用vim的各位确定尝试过各类各样的自动补全插件,好比说大名鼎鼎的 OmniCppComplete 。这一类的插件都是对 Ctags 生成的符号表进行字符串匹配来得到可能的补全项。他们在编写 C 代码的时候仍是很好用的,可是到了 C++ 的环境状况就不一样了,各类做用域的存在使得仅仅依靠符号表匹配的方式彻底没法发挥做用。php
好比我输入一个 SomeType 的对象 bar,而后我想获得成员变量 a 的提示,可是却没有任何事情发生:python
struct SomeType { int a; }; void foo() { SomeType bar; bar. // 咦。。。 }
有人会问:那像 Visual Studio 中的 IntelliSense 怎么会有那么好的补全功能呢?git
这是由于它利用了微软的 CL 编译器的功能对代码进行语法分析,这样一来补全工具就知道了各个符号所表示的究竟是函数仍是类型仍是变量,同时也知道了一个做用域里都有那些符号,那么在补全的时候就的心应手了。github
而后有人又要问了:若是咱们的插件也利用上编译器的语法分析功能那就不行了吗?web
为了解决这一问题,咱们首先能够想到的是利用你们所熟知的 GCC 。可是 GCC 对第三方应用的支持不好,没有直接的编程接口,通常的应用只能本身解析 GCC 生成的中间文件来得到所需的信息,这样的方式既费时又容易出错。编程
那有什么其余的替代方式呢?vim
接下来,我要隆重地介绍新时代的编译器 Clang,这个基于 LLVM 的编译器有着比 GCC 更快的编译速度和更人性化的错误提示,而且支持 C, C++, Objective-C 和 Objective-C++。更重要的是 Clang 提供了大量的 API 来供第三方应用调用,甚至直接就有得到自动补全提示的接口。函数
咱们今天的主角 clang_complete 就是一款基于 Clang 的插件。工具
安装前提spa
Vim 7.3 或更高版本
Clang 3.0 或更高版本
没有安装 OmniCppComplete
直接下载安装
$ vim clang_complete.vmb -c 'so %' -c 'q'
从 Github 得到并生成 (须要python)
$ git clone https://github.com/Rip-Rip/clang_complete.git $ make $ vim clang_complete.vmb -c 'so %' -c 'q'
好了话很少说,装上插件好好地享受 coding 吧!