Vimer的福音 新时代的Vim C++自动补全插件 clang_complete
使用vim的各位肯定尝试过各种各样的自动补全插件,比如说大名鼎鼎的 OmniCppComplete 。这一类的插件都是对 Ctags 生成的符号表进行字符串匹配来获得可能的补全项。他们在编写 C 代码的时候还是很好用的,但是到了 C++ 的环境情况就不同了,各种作用域的存在使得仅仅依靠符号表匹配的方式完全无法发挥作用。
比如我输入一个 SomeType 的对象 bar,然后我想得到成员变量 a 的提示,但是却没有任何事情发生:
struct SomeType { int a; };
void foo()
{
SomeType bar;
bar. // 咦。。。
}
有人会问:那像 Visual Studio 中的 IntelliSense 怎么会有那么好的补全功能呢?
这是因为它利用了微软的 CL 编译器的功能对代码进行语法分析,这样一来补全工具就知道了各个符号所表示的到底是函数还是类型还是变量,同时也知道了一个作用域里都有那些符号,那么在补全的时候就的心应手了。
然后有人又要问了:如果我们的插件也利用上编译器的语法分析功能那就不行了吗?
为了解决这一问题,我们首先可以想到的是利用大家所熟知的 GCC 。但是 GCC 对第三方应用的支持很差,没有直接的编程接口,一般的应用只能自己解析 GCC 生成的中间文件来获得所需的信息,这样的方式既费时又容易出错。
那有什么其他的替代方式呢?
接下来,我要隆重地介绍新时代的编译器 Clang,这个基于 LLVM 的编译器有着比 GCC 更快的编译速度和更人性化的错误提示,并且支持 C, C++, Objective-C 和 Objective-C++。更重要的是 Clang 提供了大量的 API 来供第三方应用调用,甚至直接就有获得自动补全提示的接口。
我们今天的主角 clang_complete 就是一款基于 Clang 的插件。
安装方法
安装前提
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'
使用方法
- 输入类名或命名空间接 :: 之后就会有域成员的提示
- 输入对象名接 . 之后会有成员符号的提示
- 输入对象指针接 -> 之后会有成员符号的提示
- 使用 Ctrl + N 强制打开补全列表
- 分别使用 Ctrl + N 和 Ctrl + P 来下翻和上翻

好了话不多说,装上插件好好地享受 coding 吧!
Vimer的福音 新时代的Vim C++自动补全插件 clang_complete的更多相关文章
- 新时代的Vim C++自动补全插件 clang_complete
Vimer的福音 新时代的Vim C++自动补全插件 clang_complete 使用vim的各位肯定尝试过各种各样的自动补全插件,比如说大名鼎鼎的 OmniCppComplete .这一类的插 ...
- vim python自动补全插件:pydiction
vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.pyt ...
- vim中自动补全插件snipmate使用
vim中自动补全插件snipmate使用 1.下载snipMatezip:https://github.com/msanders/snipmate.vim/archive/master.zip 2.解 ...
- Linux VIM python 自动补全插件:pydiction
Pydiction 可以是我们使用Tab键自动补全Python代码在Vim,是一款非常不错的插件. Pydiction不需要安装,所有没有任何依赖包问题,Pydiction主要包含三个文件. pyth ...
- vim安装自动补全插件
1. 先安装Pathogen,以便后续的插件安装. 打开网址https://github.com/tpope/vim-pathogen可以查看具体安装方法. a.创建目标并安装: mkdir -p ~ ...
- fedora 20下安装vim的C++补全插件clang_complete
1.安装clang yum install clang 2.安装clang_complete插件 git clone https://github.com/Rip-Rip/clang_complete ...
- VIM自动补全插件 - YouCompleteMe--"大神级vim补全插件"
VIM自动补全插件 - YouCompleteMe 序言 vim 之所以被称为编辑器之神多半归功于其丰富的可DIY的灵活插件功能,( 例如vim下的这款神级般的代码补全插件YouCompleteMe) ...
- 【转】Vim自动补全插件----YouCompleteMe安装与配置
原文网址:http://www.cnblogs.com/zhongcq/p/3630047.html 使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assis ...
- Vim自动补全插件----YouCompleteMe安装与配置
Vim自动补全插件----YouCompleteMe安装与配置 使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assist X这么方便快捷的补全插件呢?以前用 ...
随机推荐
- 20145215《Java程序设计》第8周学习总结
20145215<Java程序设计>第八周学习总结 教材学习内容总结 NIO与NIO2 认识NIO NIO使用频道(Channel)来衔接数据节点,在处理数据时,NIO可以设定缓冲区(Bu ...
- java <? super Fruit>与<? extends Fruit>
package Test2016; import java.util.ArrayList; import java.util.List; public class Test2016 { public ...
- Windows Phone8 中如何引用 SQLite 数据库2
本博文编写环境 VS2013 + WP8 SDK 上篇介绍完了SQLite在wp中的部署(具体请参阅 Windows Phone8 中如何引用 SQLite 数据库),下面来看如何使用 SQLite ...
- css中的伪类和伪元素
伪类用单冒号 我们平时熟悉的a:link.a:visited.a:hover和a : active 伪元素用双冒号(为了更好的兼容我们也用单冒号) 常用的:before :after和 :fir ...
- 05.C#泛型类型(三章3.1-3.2)
接下来说下C#中的泛型,熟练地使用泛型能提高代码的重用性,使用我们代码瞬间就高大上了,当然只有一点点,真的只有一点点,因为后面要学习和掌握的知识还有很多.先来看下一个使用Dictionary<T ...
- Beta 分工比例
组员在Beta版本的分工和个人贡献百分比. 人员 任务完成情况 贡献比 031302331 闹钟,爬取知乎数据,书籍下载,解决bug,帮助队友 25% 031302442 注册登录逻辑,书籍评论评分页 ...
- [转]Java静态方法为什么不能访问非静态方法
非静态方法(不带static)可以访问静态方法(带static),但是反过来就不行,为什么呢? ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 publi ...
- IntelliJ Idea13无法创建maven模板
一.错误信息: -Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment v ...
- word中打出希腊字母
作为一个键盘党,不喜欢用鼠标去选择希腊字母,希望只用键盘就能在word中打出希腊字母. 方法是:按照下图所示对应表,先输入英文字母,然后选中它并按Ctrl+Shift+Q
- BZOJ-3211花神游历各国 并查集+树状数组
一开始想写线段树区间开方,简单暴力下,但觉得变成复杂度稍高,懒惰了,编了个复杂度简单的 3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Subm ...