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 吧!

 
 
 
标签: C++vim插件

新时代的Vim C++自动补全插件 clang_complete的更多相关文章

  1. Vimer的福音 新时代的Vim C++自动补全插件 clang_complete

    使用vim的各位肯定尝试过各种各样的自动补全插件,比如说大名鼎鼎的 OmniCppComplete .这一类的插件都是对 Ctags 生成的符号表进行字符串匹配来获得可能的补全项.他们在编写 C 代码 ...

  2. vim python自动补全插件:pydiction

    vim python自动补全插件:pydiction 可以实现下面python代码的自动补全: 1.简单python关键词补全 2.python 函数补全带括号 3.python 模块补全 4.pyt ...

  3. vim中自动补全插件snipmate使用

    vim中自动补全插件snipmate使用 1.下载snipMatezip:https://github.com/msanders/snipmate.vim/archive/master.zip 2.解 ...

  4. Linux VIM python 自动补全插件:pydiction

    Pydiction 可以是我们使用Tab键自动补全Python代码在Vim,是一款非常不错的插件. Pydiction不需要安装,所有没有任何依赖包问题,Pydiction主要包含三个文件. pyth ...

  5. vim安装自动补全插件

    1. 先安装Pathogen,以便后续的插件安装. 打开网址https://github.com/tpope/vim-pathogen可以查看具体安装方法. a.创建目标并安装: mkdir -p ~ ...

  6. fedora 20下安装vim的C++补全插件clang_complete

    1.安装clang yum install clang 2.安装clang_complete插件 git clone https://github.com/Rip-Rip/clang_complete ...

  7. VIM自动补全插件 - YouCompleteMe--"大神级vim补全插件"

    VIM自动补全插件 - YouCompleteMe 序言 vim 之所以被称为编辑器之神多半归功于其丰富的可DIY的灵活插件功能,( 例如vim下的这款神级般的代码补全插件YouCompleteMe) ...

  8. 【转】Vim自动补全插件----YouCompleteMe安装与配置

    原文网址:http://www.cnblogs.com/zhongcq/p/3630047.html 使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assis ...

  9. Vim自动补全插件----YouCompleteMe安装与配置

    Vim自动补全插件----YouCompleteMe安装与配置 使用Vim编写程序少不了使用自动补全插件,在Linux下有没有类似VS中的Visual Assist X这么方便快捷的补全插件呢?以前用 ...

随机推荐

  1. ASP.NET 5- 1

    ASP.NET 5 入门(1) - 建立和开发ASP.NET 5 项目   ASP.NET入门(1) - 建立和开发ASP.NET 5 项目 建立项目 首先,目前只有VS 2015支持开发最新的ASP ...

  2. ArcEngine载入中SDE问题栅格数据

    当直接加载矢量数据到IFeatureWorkspace接口可,但是,在装载门格当要传送的数据IRasterWorkspaceEx接口. 效果如下面的,对可以被添加到双击Globe在. watermar ...

  3. 深入理解C指针之一:初识指针

    原文:深入理解C指针之一:初识指针 简单来说,指针包含的就是内存地址.理解指针关键在于理解C的内存管理模式.C里面有三种内存: ①.静态全局内存(生命周期从程序开始到程序结束,全局变量作用域是全局,静 ...

  4. 使用PHP生成PDF文档

    原文:使用PHP生成PDF文档 实际工作中,我们要使用PHP动态的创建PDF文档,目前有许多开源的PHP创建PDF的类库,今天我给大家来介绍一款优秀的PDF库,它就是TCPDF,TCPDF是一个用于快 ...

  5. JS 数组array方法push, pop, unshift, shift, slice,splice,contact, join, sort

    Array:数组对象用来在单独的变量名中存储一系列的值   定义数组:         1. var arrayObj = new Array();         2. var arrayObj = ...

  6. JS判断Array数组中是否包含指定元素

    1.调用方式: var arr=["a","b"]; alert(arr.in_array("a")) 2.JS判断数组是否包含指定元素方法 ...

  7. 简单DP-艰难取舍

    艰难取舍(seq.cpp/c/pas) [题目描述] 由于hyf长得实在是太帅了,英俊潇洒,风流倜傥,人见人爱,花见花开,车见车载.有一群MM排队看hyf.每个 MM都有自己独特的风格,由于 hyf有 ...

  8. Android adb端口转发调试助手Packet Sender

    相信大家做过安卓开发或者安卓自动化测试开发的都离不开adb这个Android Debug Bridge这个工具,该工具有个很重要的功能就是端口转发.比如你在目标安卓机器端建立了一个服务来处理获取当前界 ...

  9. MySQL的备份与还原

    原文:MySQL的备份与还原 MySQL备份和还原,都是利用mysqldump.mysql和source命令来完成的. 1.Win32下MySQL的备份与还原 1.1 备份 开始菜单 | 运行 | c ...

  10. curl_redir_exec()函数

    function curl_redir_exec($ch,$debug="") { static $curl_loops = 0; static $curl_max_loops = ...