戴维图书馆 / 笔记 / Emacs+auto

0 0

   

Emacs+auto

2016-03-13  戴维图书馆
  Clang是一个C/C++/ObjectC语言的编译器前端,采用LLVM作为后端提供了一个性能接近GCC的编译器。不过我们现在的目标是使用Clang帮助进行代码分析和补全。

首先去Clang的官方网站下载一套编译安装,官方网站地址是:http://clang.llvm.org/

接下来需要安装auto-complete,下载一份,http://cx4a.org/software/auto-complete/,解压缩后,安装,只需要load-file install.el然后按照提示复制4行到.emacs文件即完成了安装。

接下来是auto-complete的clang插件,下载地址,https://github.com/brianjcj/auto-complete-clang
解压缩到任何地方,并将该路径add-to-list,例如:
  1. (add-to-list 'load-path "~/.mylisp/")  



接下来做一些配置,按照给出的模板进行修改即可:
  1. (require 'auto-complete-clang)  
  2. (setq ac-clang-auto-save t)  
  3. (setq ac-auto-start t)  
  4. (setq ac-quick-help-delay 0.5)  
  5. ;; (ac-set-trigger-key "TAB")  
  6. ;; (define-key ac-mode-map  [(control tab)] 'auto-complete)  
  7. (define-key ac-mode-map  [(control tab)] 'auto-complete)  
  8. (defun my-ac-config ()  
  9.   (setq ac-clang-flags  
  10.         (mapcar(lambda (item)(concat "-I" item))  
  11.                (split-string  
  12.                 "  
  13.  /usr/include/c++/4.4  
  14.  /usr/include/c++/4.4/i486-linux-gnu  
  15.  /usr/include/c++/4.4/backward  
  16.  /usr/local/include  
  17.  /usr/lib/gcc/i486-linux-gnu/4.4.5/include  
  18.  /usr/lib/gcc/i486-linux-gnu/4.4.5/include-fixed  
  19.  /usr/include/i486-linux-gnu  
  20.  /usr/include  
  21. ")))  
  22.   (setq-default ac-sources '(ac-source-abbrev ac-source-dictionary ac-source-words-in-same-mode-buffers))  
  23.   (add-hook 'emacs-lisp-mode-hook 'ac-emacs-lisp-mode-setup)  
  24.   ;; (add-hook 'c-mode-common-hook 'ac-cc-mode-setup)  
  25.   (add-hook 'ruby-mode-hook 'ac-ruby-mode-setup)  
  26.   (add-hook 'css-mode-hook 'ac-css-mode-setup)  
  27.   (add-hook 'auto-complete-mode-hook 'ac-common-setup)  
  28.   (global-auto-complete-mode t))  
  29. (defun my-ac-cc-mode-setup ()  
  30.   (setq ac-sources (append '(ac-source-clang ac-source-yasnippet) ac-sources)))  
  31. (add-hook 'c-mode-common-hook 'my-ac-cc-mode-setup)  
  32. ;; ac-source-gtags  
  33. (my-ac-config)  



需要说明的几点是:
ac-clang-flags是头文件的目录,根据系统的不同可能你的头文件目录也会不同,列出系统中所有的头文件目录方法是:
  1. $ echo "" | g++ -v -x c++ -E -  


你可能会找到类似这样的行:
  1. #include "..." search starts here:  
  2. #include <...> search starts here:  
  3.  /usr/include/c++/4.4  
  4.  /usr/include/c++/4.4/i486-linux-gnu  
  5.  /usr/include/c++/4.4/backward  
  6.  /usr/local/include  
  7.  /usr/lib/gcc/i486-linux-gnu/4.4.5/include  
  8.  /usr/lib/gcc/i486-linux-gnu/4.4.5/include-fixed  
  9.  /usr/include/i486-linux-gnu  
  10.  /usr/include  
  11. End of search list.  


中间列出的那些目录就是你需要的,替换上面代码中的目录即可


ac-auto-start参数是ac的提示是否自动启动,如果不自动启动的话,将它设为nil即可,你需要补全的时候自己按快捷键进行补全,快捷键的设置方法是:
  1. (define-key ac-mode-map  [(control tab)] 'auto-complete)  


如果这一项设置为t,ac则会自动在有补全的地方列出可补全的项。


有的机器使用的是旧版本的clang,比如假如你使用某个古代发行版自带的旧版本clang,不支持通过stdio进行交互,则需要自动保存文件才能正确调用clang获取补全提示,设置的方法是:
  1. (setq ac-clang-auto-save t)  


当然新版本的clang可能就不需要这一项了。





    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。如发现有害或侵权内容,请点击这里 或 拨打24小时举报电话:4000070609 与我们联系。

    猜你喜欢

    0条评论

    发表

    请遵守用户 评论公约

    类似文章
    喜欢该文的人也喜欢 更多