Linux下配置emacs使用auto-complete完成c++代码自动补全

最近在看SICP,里面的实现语言是Scheme(Lisp的一种方言),于是试着配置了Scheme的环境,自然而然得用到了Emacs编辑器,配置Emacs编辑器要用Lisp编程实现(是的,你没看错,要用Lisp编程实现Emacs的配置,之后用Emacs编写Lisp的程序……),之后发现Emacs的插件功能很强大,可以完成c++的自动补全,这里记录一下配置过程。

1. Emacs编辑器简介

Linux下配置emacs使用auto-complete完成c++代码自动补全_第1张图片
Emacs运行初始界面

Emacs,著名的集成开发环境和文本编辑器。Emacs被公认为是最受专业程序员喜爱的代码编辑器之一,另外一个被广泛使用的是VIM编辑器。Emacs使用Lisp这种有着极强扩展性的编程语言,从而实现了包括编程、编译乃至网络浏览等等功能的扩展。

2. Emacs编辑器的安装

本人安装的是GNU Emacs,支持Linux,windows,MacOS三种平台,查看安装步骤请点击链接。本文介绍在Linux平台下的安装。

3. 安装自动补全插件auto-complete和auto-complete-clang

约定:C-x代表同时按Controlx键,M-b代表同时按Altb

  1. 在路径~/emacs.d下创建init.el文件,在文件中添加以下内容:
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/"))
(package-initialize)
  1. 打开Emacs(安装好后,直接搜索GNU-Emacs,单击就可以打开),输入
M-x package-install

敲击回车,之后在编辑器最下方可以看到:


在光标后输入 auto-complete,敲击回车,即完成 auto-complete插件的安装;之后相同步骤完成 auto-complete-clang插件的安装。

3 . 安装完成后,~/emacs.d文件夹会生成elpa文件夹,elpa文件夹中是安装好的插件,如下图

Linux下配置emacs使用auto-complete完成c++代码自动补全_第2张图片

之后打开~/emacs.d下的init.el文件,再其中添加以下内容:


(add-to-list 'load-path "~/.emacs.d/elpa/auto-complete-20170124.1845/")
(require 'auto-complete)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/elpa/auto-complete-20170124.1845/dict/")
(require 'auto-complete-config)
(add-to-list 'load-path "~/.emacs.d/elpa/auto-complete-clang-20140409.52/")
(require 'auto-complete-clang)  
;; 设置不自动启动
(setq ac-auto-start nil)  
;; 设置响应时间 0.5
(setq ac-quick-help-delay 0.5)  
;;(ac-set-trigger-key "TAB")  
;;(define-key ac-mode-map  [(control tab)] 'auto-complete)  
;; 提示快捷键为 M-/
(define-key ac-mode-map  (kbd "M-/") 'auto-complete) 
(defun my-ac-config ()  
  (setq ac-clang-flags  
        (mapcar(lambda (item)(concat "-I" item))  
               (split-string  
                "
 /usr/include/c++/4.7
 /usr/include/x86_64-linux-gnu/c++/4.7/.
 /usr/include/c++/4.7/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.7/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)  
;; ac-source-gtags  
(my-ac-config)  
(ac-config-default)
;; 结束

注意:

  • 第1,3,5行修改对应文件路径到你自己的安装路径,上面的配置是我自己的配置路径。
  • 配置文件中也声明了代码自动补全的相应设置,比如响应时间,是否自动启动,提示快捷键(这里设置的是M-/,当然你也可以自己修改成任意按键)
  • 因为要完成c++代码的自动补全,所以要将c++库的路径添加到配置文件,配置文件中的是我自己的c++库路径
/usr/include/c++/4.7
/usr/include/x86_64-linux-gnu/c++/4.7/.
/usr/include/c++/4.7/backward
/usr/lib/gcc/x86_64-linux-gnu/4.7/include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
/usr/include/x86_64-linux-gnu
/usr/include

在终端中输入如下命令可以生成自己的c++库的路径,首先输入:

echo "" | g++ -v -x c++ -E -

终端会输出:

#include "..." 搜索从这里开始:
#include <...> 搜索从这里开始:
 /usr/include/c++/4.7
 /usr/include/x86_64-linux-gnu/c++/4.7/.
 /usr/include/c++/4.7/backward
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.7/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
搜索列表结束。

中间输出的即为你自己的c++库目录,之后替换你自己对应的路径到配置文件init.el中即完成配置。

4. 补全效果

放一张补全效果图,感觉还是很强大的,毕竟是在这样底层环境下实现的自动补全。


Linux下配置emacs使用auto-complete完成c++代码自动补全_第3张图片

5. 常用Emacs命令

附一张常用Emacs命令,感觉概括了常用的命令,很不错。

Linux下配置emacs使用auto-complete完成c++代码自动补全_第4张图片
emacs指南.png

希望本篇博客可以给使用Emacs编辑器的同学一些帮助。

你可能感兴趣的:(Linux下配置emacs使用auto-complete完成c++代码自动补全)