Emacs补全利器:auto-complete+gccsense zz
via Emacs中文网 by ahei on 11/7/10
作者: Menglong Tan
1 前言
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代码基础上改的,主要用来从代码中提取补全信息
- 下载:http://cx4a.org/software/gccsense/#Downloads
编译安装之前,准备好环境,debian系统如下:sudo apt-get install build-essential libgmp3-dev libmpfr-dev flex ruby rubygems libsqlite3-ruby
其它系统,如freebsd、macos请自行参考用户手册。
- 配置安装:
$ 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这个包包含一些辅助函数,以及编辑器的插件
- 解压缩之后,执行:
$ cd gccsense-* $ sudo cp bin/* /usr/local/bin/
- 执行一下命令,确保安装成功:
$ gccrec --version $ autopch --version
- 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 实例
- 准备一个测试cpp文件,test.cpp:
#include <string> using namespace std; int main() { string s; }
- 使用gccrec记录编译命令
gccrec g++-code-assist test.cpp
这里可以认为g++-code-assist就是g++,参数一样的,比如-I -l之类的。
- 用emacs打开test.cpp,享受补全吧
在string s;后面接着输入s.,然后按M-x ac-complete-gccsense,就可以利用auto-complete和它的gccsense后端来补全了。
6 附录
7 参考
gccsense用户手册,http://cx4a.org/software/gccsense/manual.html
Things you can do from here:
- Subscribe to Emacs中文网 using Google Reader
- Get started using Google Reader to easily keep up with all your favorite sites
--
Sincerely,
YANG Guifu
School of Computer Science and Information Technology
Northeast Normal University
Changchun, P.R.China
----
杨贵福
无不大工。
No comments:
Post a Comment