emacs下C/C++自动补全,Yasnippet && auto-complete && auto-complete-clang-async

   Emacs自动补全有许多插件,yasnippet和auto-complete比较简洁和方便,且功能也非常强大,yasnippet是一个代码片段补全工具,可以用来补全大段的常用的代码片段类似与mac上的textmate。auto-complete是一个补全的前端,可以与许多补齐的后端工具配合。先来说说如果安装这两个软件的最近build版本,注意不是稳定版,因为最新的稳定版两个插件会出现冲突。(前提是你已经安装了git)


    首先安装yasnippet,由于是装最新的build版本,所以先clone它到~/.emacs.d/plugins/中去,如果没有.emacs.d文件夹,那么先自己创建一个(mkdir .emacs.d),输入以下命令:
cd ~/.emacs.d/plugins
git clone https://github.com/capitaomorte/yasnippet.git

然后再到配置文件中加入下面内容:
(add-to-list 'load-path
"~/.emacs.d/plugins/yasnippet")
(require 'yasnippet)
(yas/global-mode 1)
在这里就安装完毕了,之后尼可以把自己的代码片段放到.emacs.d/snippets 文件夹中了。

 


再安装auto-complete,auto-complete需要先编译,与前面类似,先clone到本地:
cd ~/.emacs.d/plugins
git clone https://github.com/auto-complete/auto-complete.git
接下来是编译了,编译可以用make,或者用emacs,make的话,他一老说我缺少popup-el,然后用install-elisp安装popup后,编译器还是说缺少popup,蛋疼死了,所以就直接用emacs安装了,命令如下:
emacs -batch -l etc/install.el
安装成功后在配置文件中加入如下几行
(add-to-list 'load-path "~/.emacs.d") ; This may not be appeared if you have already added.
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(ac-config-default)
然后重新启动emacs,就可以同时使用yasnippet与auto-complete了
 
这些东西弄好后,会有一个问题,就是自动补全只能补全c或者c++的关键字或者你已经在buffer中输入过的东西(可能描述不是很清楚,总之用了就知道,补全不是你想要的效果)。那么怎么办呢?其实这是因为auto-complete只是一个补全前端,你可以自己再安装一个补全后端,以达到理想的补齐效果,比较出名的后端补齐有cedet中的semantics,不过它速度好像比较慢,所以就没有使用。还有gccsence,gccsence弄了很久也没弄好,而且gccsence不能马上补齐,因为他是基于gcc一些编译的信息,所以要使用补全功能,必须先编译一次代码,所以也不是我想要的效果。于是换另外一个叫做auto-complete-clang的,不过auto-complete-calng的话,按照官方的文档设置,总是出现问题不能补全,可能和最新版本的auto-complete不兼容吧。后来发现了另外一个补齐工具,是基于auto-complete-clang的,叫做emacs-clang-complete-async,安装完毕后,发现非常好用,在这里写一下安装过程把。
首先因为emacs-clang-complete-async是利用libclang这个库文件达到随时对代码进行补全的效果,所以它并不是纯粹的elisp语言编写,他有客户端(auto-complete-clang-async.el)和服务端(clang-complete ,这是个二进制文件,用c编写的)所以他们是使用client-server的异步合作方式。
因为基于clang库,所以先安装这个库文件
sudo apt-get install llvm*
sudo apt-get install clang*
然后把整个源代码clone到.emacs.d中
cd .emacs.d/
git clone https://github.com/Golevka/emacs-clang-complete-async.git
然后运行make命令,再接着把编译出来的二进制文件与之前的el文件复制到.emacs.d中
cp clang-complete auto-complete-clang-async.el ~/.emacs.d
最后在.emacs文件中加入以下内容
(require 'auto-complete-clang-async)
(defun ac-cc-mode-setup ()
(setq ac-clang-complete-executable "~/.emacs.d/clang-complete")
(setq ac-sources '(ac-source-clang-async))
(ac-clang-launch-completion-process)
)
(defun my-ac-config ()
(add-hook 'c-mode-common-hook 'ac-cc-mode-setup)
(add-hook 'auto-complete-mode-hook 'ac-common-setup)
(global-auto-complete-mode t))
(my-ac-config)
大功告成,享受自动补全带来的快感把!对了,这个插件还有一个在实验中的功能非常给力,就是自动检测语法错误,貌似是利用了flymake。只要在alt+x,然后输入ac-clang-syntax-check。或者你也可以自己设置一个快捷键!

你可能感兴趣的:(emacs下C/C++自动补全,Yasnippet && auto-complete && auto-complete-clang-async)