Emacs C++ Auto Complete

所谓 auto complete 即自动完成,就是智能猜测用户想输入的词,帮助用户自动输入,通常我们所说的 IDE 中的 Intellisense 也可用认为是某种自动完成。

auto-complete 是第三方开发者写的插件,提供自动完成支持,配合 Clang 可实现对 C、C++ 进行代码补全。

Clang 是一个 C、C++、Objective-c、Objective-C++ 编程语言的编译器前端。它采用底层虚拟机(LLVM)作为其后端,它的目标是替代 GCC,在苹果公司的赞助支持下进行开发,而且开源。

安装插件

在 github 下载 auto-completeauto-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.

然后直接替换即可。

效果图

深度截图_选择区域_20180430182104

Qt 补全

添加 Qt 的头文件目录,一般在 /usr/include/x86_64-linux-gnu/qt5,然后通过 ac-clang-flags 这个变量中的设置。

其他方案

小结

自动完成框架,我认为唯一做得好的就是 auto-complete 了,加上 clang 后端语法解析引擎,其他都很普通。

1 条思考于 “Emacs C++ Auto Complete

发表评论

电子邮件地址不会被公开。 必填项已用*标注