• [vim]clang带来的clang complete代码补全插件


      用vim写C++代码,基本上没多少补全插件可以选.我用的是omnicppcomplete,这个插件靠tags来实现补全,效果差强人意.

      前一段时间发现了clang complete,发现效果很好(广告一下:D).所以推荐一下.clang complete是llvm/clang带来的额外功能.clang complete是靠编译C++文件,应该是获得抽象语法树,进而进行补全的.所以,补全效果非常好,非常准确.但是,也有可能会比较慢.

      OK,有兴趣的多去Google一下llvm/clang,关注一下llvm/clang这些个项目.顺便关注一下clang_complete,这些项目更新的都很快.

      clang complete有两种补全,一种是用clang(exec)编译代码进行补全,另外一种是用libclang,后一种依赖python.我们来看看后一种.

      1. 先编译vim,让其支持python写的插件.

      我的Debian 6里面,最开始没装python2.6-dev,然后编译出来的vim死活都不支持py......所以,先要看看是不是装了python2.6-dev.最新的vim 7.3支持python3的,所以想要支持python3也要看看python3的dev包是不是已经安装.

    ./configure --enable-pythoninterp --enable-gui=no --enable-cscope --enable-multibyte --enable-fontset --with-features=huge
    make -j2
    

      然后在root权限下make install,打开vim,输入:py,看看出错信息,判断是不是已经支持python了.不支持的话,就只能用clang编译代码.

      2. 安装clang complete插件.(巨easy)

      到https://github.com/Rip-Rip/clang_complete上面去下载最新的插件,这个插件更新很快,我第一次用的时候,还没有libclang支持~~,然后按照README,把他拷贝到~/.vim/plugin 下面就行了.

      这个时候,打开一个cpp文件,看看能不能通过:: , . , ->来获得智能提示. 顺便提一句,clang complete不能和omnicppcomplete和平共处,必须得删掉omnicppcomplete才可以工作....一般情况下,只要你拷贝对了位置,vimrc里面打开了所有插件,那么就可以获得智能提示.

      3. 预编译一些头文件

      clang/libclang都是实时编译的,所以效率可能会有问题,尤其是当代码非常多的时候.在这里,作者给了一种解决办法,就是预编译.办法也很简单,创建一个头文件,然后include你的那些文件,然后调用clang预编译一下:

    clang -x c++-header ./pchheader.h -fno-exceptions -fnu-runtime -o ./pchheader.pch
    

      上面就是README里面的示例,预编译这个pchheader.h,然后

    echo '-include-pch pchheader.pch -fgnu-runtime' >> .clang_complete 
    

      就可以了.

         4. user option

      上面说的预编译,和libclang是不能共存的,所以不推荐使用.使用libclang编译,需要在.vimrc里面配置:

    let g:clang_complete_copen=1
    let g:clang_periodic_quickfix=1
    let g:clang_snippets=1
    let g:clang_close_preview=1
    let g:clang_use_library=1
    let g:clang_user_options='-stdlib=libc++ -std=c++11 -IIncludePath'

      这是我的配置,可以参考一下. clang_user_options这边我开启了c++11,并且使用libc++而不是libstdc++.

      另外,这个.clang_complete还可以用来包含你这个项目需要的额外头文件路径,如果代码里面用到的某些头文件没找到,他回到这里面去找.不过还好,我的Debian里面没有这种问题.

      后面附上一张clang complete补全的图片:

      

      

      

    PS:

    在我的Debian上,加了预编译的stl,提示超级快~~. 现在都是用libclang来补全的,速度不错

    另外,如果想要用clang complete,你的代码必须要能被编译过去,否则没办法提示的....我们代码就很悲剧,用来很多gcc扩展,而且写得不标准......

    clang 2.8可以比较好的支持C++03,C++0x支持不是很好,估计2.9会改善

    clang 3.1 目前支持的c++11应该是最多的

  • 相关阅读:
    iOS——归档对象的创建,数据写入与读取
    iOS——plist的创建,数据写入与读取
    SQL SERVER 2005快捷键
    图片放大源码
    验证url 地址是否是图片
    JS三大经典变量命名法
    载入锁频
    SQL Server 查询分析器键盘快捷方式
    关于ajax get方式请求 url地址参数怎么变成空了的问题
    SQL计算表的列数
  • 原文地址:https://www.cnblogs.com/egmkang/p/clang_complete.html
Copyright © 2020-2023  润新知