zoukankan      html  css  js  c++  java
  • 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 吧!

  • 相关阅读:
    Oracle存储过程编译卡死的解决方法
    异常来自 HRESULT:0x800A01A8
    WIP
    R12: How to add Microsoft Excel as Type to the Create Template List of Values in BI Publisher (Doc ID 1343225.1)
    XML Publisher Template Type
    打印报表以显示具有给定责任的用户-FNDSCRUR责任用户
    Credit Memo和Debit Memo在AR以及AP中的概念比较
    EBS-BG&LE&OU
    普通pc电脑安装苹果系统mac_详细教程(精)附带所有工具下载
    教程 打造OS X Mavericks原版 EFI Clover 引导安装
  • 原文地址:https://www.cnblogs.com/Jiajun/p/3307979.html
Copyright © 2011-2022 走看看