首页 > IDE, 中级, 自动补全 > Emacs补全利器:auto-complete+gccsense

Emacs补全利器:auto-complete+gccsense

2010年11月8日 ahei 发表评论 阅读评论

作者: Menglong Tan

1 前言

搜索引擎上关于emacs代码补全的文章一大堆,大多讲的是cedet、semantic、ctags之类的。我自己也尝试过一些“主流”的组合,奈何都不来感啊。用得最长的也就auto-complete了,但是用的也仅仅是它自带的buffer内内容的补全,基本不涉及语义的补全。偶然发现了gccsense这个东西,简单配置了下,比较满意。有图有真相

Emacs gccsense


我绑定的补全键到M+/,这样,遇到要补全的地方,按下M+/就出现了补全菜单,旁边是提示。

2 简介

auto-complete提供一个补全的前端,通过不同的后端,支持ctags等。
gccsense是补全的后端,能提供符合语义的补全。因为它是直接利用gcc的代码,使用了编译器内在的分析器。它是一个独立的程序,目前通过插件可以被用到emacs和vim的补全上。因为是用的gcc的代码,理论上可以补全所有gcc支持的语言。
auto-complete和gccsense是一家出的。

3 安装

3.1 配置auto-complete

下载:http://cx4a.org/software/auto-complete/
配置.emacs,我的auto-complete在/mydoc/lib/emacs-plugins/下

; auto complete
(add-to-list 'load-path "/mydoc/lib/emacs-plugins/auto-complete")  
(require 'auto-complete-config)  
(add-to-list 'ac-dictionary-directories "/mydoc/lib/emacs-plugins/auto-complete/ac-dict")  
(ac-config-default)

3.2 配置gcc-code-assist

gcc-code-assist就是在gcc代码基础上改的,主要用来从代码中提取补全信息

  1. 下载:http://cx4a.org/software/gccsense/#Downloads
    编译安装之前,准备好环境,debian系统如下:

    sudo apt-get install build-essential libgmp3-dev libmpfr-dev flex ruby rubygems libsqlite3-ruby

    其它系统,如freebsd、macos请自行参考用户手册。

  2. 配置安装:

    $ tar xvjf gcc-code-assist-*.tar.bz2  
    $ cd gcc-code-assist-*  
    $ ./configure --program-suffix=-code-assist --enable-languages=c,c++ --disable-bootstrap --disable-multilib  
    $ make # -j2  
    $ sudo make install

    安装成功之后执行下,如果有正常输出,就说明安装成功:

    $ gcc-code-assist --version  
    $ g++-code-assist --version

3.3 安装配置gccsense

gccsense这个包包含一些辅助函数,以及编辑器的插件

  1. 解压缩之后,执行:

    $ cd gccsense-*
    $ sudo cp bin/* /usr/local/bin/
  2. 执行一下命令,确保安装成功:

    $ gccrec --version 
    $ autopch --version
  3. emacs的插件文件为etc/gccsense.el,放到插件目录然后,在.emacs里面加入

    (require 'gccsense)

    即可。
    由于我的gccsense.el放到了。/mydoc/lib/emacs-plugins/c下,并且把auto-complete的补全命令绑定到了M+/上,所以这部分配置如下:

    (add-to-list 'load-path "/mydoc/lib/emacs-plugins/c")  
    (require 'gccsense)  
    (global-set-key "\257" (quote ac-complete-gccsense))

    ok,搞定。

4 主要模块介绍

在介绍使用前,简单介绍下几个主要模块的作用

  • gcc-code-assist
    gcc4.4代码基础上改的那位,用来从被补全代码中分析出补全信息
  • gccrec
    编译一个文件,往往要加上编译参数的,比如自定义的include地址。但是编辑器在补全的时候,是不知道这些的,硬生生地调用gcc-code-assist来“模拟编译”,参数补全造成的错误会扰乱补全信息的获取。
    gccrec就是为了解决这个问题,在使用编辑器补全之前,需要执行一次gccrec,它会将编译参数信息存到~/.gccrec这个sqlite3的数据库中。具体用法参见下一节的示例。
  • autopch
    用来启用预编译头,来提高速度。
    autopch的相关部分请各位看官自行参考用户手册吧,后面的示例代码简单,不需要这个东西。

5 实例

  1. 准备一个测试cpp文件,test.cpp:

    #include <string>  
    using namespace std;  
    int main()  
    {  
        string s;
    }
  2. 使用gccrec记录编译命令

    gccrec g++-code-assist test.cpp

    这里可以认为g++-code-assist就是g++,参数一样的,比如-I -l之类的。

  3. 用emacs打开test.cpp,享受补全吧
    在string s;后面接着输入s.,然后按M-x ac-complete-gccsense,就可以利用auto-complete和它的gccsense后端来补全了。

6 附录

这里贴上我的emacs相关部分的配置文件。
我把补全的命令绑定到了M-/上面,
gccsense.el放到了/mydoc/lib/emacs-plugins/c/下面,所以这样写:

(add-to-list 'load-path "/mydoc/lib/emacs-plugins/c")  
(require 'gccsense)  
(global-set-key "\257" (quote ac-complete-gccsense))

7 参考

分享家:Addthis中国
GD Star Rating
loading...
Emacs补全利器:auto-complete+gccsense , 8.0 out of 10 based on 25 ratings 该日志未加标签。
分类: IDE, 中级, 自动补全
:wink: :-| :-x :twisted: :) 8-O :( :roll: :-P :oops: :-o :mrgreen: :lol: :idea: :-D :evil: :cry: 8) :arrow: :-? :?: :!: