所谓 auto complete 即自动完成,就是智能猜测用户想输入的词,帮助用户自动输入,通常我们所说的 IDE 中的 Intellisense 也可用认为是某种自动完成。
auto-complete 是第三方开发者写的插件,提供自动完成支持,配合 Clang 可实现对 C、C++ 进行代码补全。
Clang 是一个 C、C++、Objective-c、Objective-C++ 编程语言的编译器前端。它采用底层虚拟机(LLVM)作为其后端,它的目标是替代 GCC,在苹果公司的赞助支持下进行开发,而且开源。
安装插件
在 github 下载 auto-complete 与 auto-complete-clang,丢到自己的配置目录;
或者通过 elpa (Emacs 的 “AppStore”),M-x package-install
,安装完成后 ~/.emacs.d/
会生成 elpa 文件夹,elpa 里边是安装好的插件。
auto-complete-clang 配置
(defun my-ac-config ()
(setq ac-clang-flags
(mapcar(lambda (item)(concat "-I" item))
(split-string
"
/usr/include/c++/6
/usr/include/x86_64-linux-gnu/c++/6
/usr/include/c++/6/backward
/usr/lib/gcc/x86_64-linux-gnu/6/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
")))
(setq-default ac-sources '(ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers))
(add-hook 'emacs-lisp-mode-hook 'ac-emacs-lisp-mode-setup)
;; (add-hook 'c-mode-common-hook 'ac-cc-mode-setup)
(add-hook 'ruby-mode-hook 'ac-ruby-mode-setup)
(add-hook 'css-mode-hook 'ac-css-mode-setup)
(add-hook 'auto-complete-mode-hook 'ac-common-setup)
(global-auto-complete-mode t))
(defun my-ac-cc-mode-setup ()
(setq ac-sources (append '(ac-source-clang ac-source-yasnippet) ac-sources)))
(add-hook 'c-mode-common-hook 'my-ac-cc-mode-setup)
(my-ac-config)
需要注意的是 ac-clang-flags 是头文件目录,根据系统的不同你的头文件目录也会不同,列出头文件目录的方法:
$ echo "" | g++ -v -x c++ -E -
你会找到类似几行:
#include "..." search starts here:
#include <...> search starts here:
/usr/include/c++/6
/usr/include/x86_64-linux-gnu/c++/6
/usr/include/c++/6/backward
/usr/lib/gcc/x86_64-linux-gnu/6/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/6/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include
End of search list.
然后直接替换即可。
效果图
Qt 补全
添加 Qt 的头文件目录,一般在 /usr/include/x86_64-linux-gnu/qt5
,然后通过 ac-clang-flags 这个变量中的设置。
其他方案
小结
自动完成框架,我认为唯一做得好的就是 auto-complete 了,加上 clang 后端语法解析引擎,其他都很普通。
配置代码里面也不来点注释……