Linux下配置emacs使用auto-complete完成c++代碼自動補全

最近在看SICP户魏,里面的實現(xiàn)語言是Scheme(Lisp的一種方言),于是試著配置了Scheme的環(huán)境兰珍,自然而然得用到了Emacs編輯器温亲,配置Emacs編輯器要用Lisp編程實現(xiàn)(是的,你沒看錯匕得,要用Lisp編程實現(xiàn)Emacs的配置继榆,之后用Emacs編寫Lisp的程序……),之后發(fā)現(xiàn)Emacs的插件功能很強大汁掠,可以完成c++的自動補全略吨,這里記錄一下配置過程。

1. Emacs編輯器簡介

Emacs運行初始界面

Emacs考阱,著名的集成開發(fā)環(huán)境和文本編輯器翠忠。Emacs被公認為是最受專業(yè)程序員喜愛的代碼編輯器之一,另外一個被廣泛使用的是VIM編輯器乞榨。Emacs使用Lisp這種有著極強擴展性的編程語言秽之,從而實現(xiàn)了包括編程、編譯乃至網(wǎng)絡瀏覽等等功能的擴展吃既。

2. Emacs編輯器的安裝

本人安裝的是GNU Emacs考榨,支持Linux,windows,MacOS三種平臺,查看安裝步驟請點擊鏈接鹦倚。本文介紹在Linux平臺下的安裝河质。

3. 安裝自動補全插件auto-complete和auto-complete-clang

約定:C-x代表同時按Controlx鍵,M-b代表同時按Altb

  1. 在路徑~/emacs.d下創(chuàng)建init.el文件震叙,在文件中添加以下內(nèi)容:
(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文件夾中是安裝好的插件对人,如下圖

之后打開~/emacs.d下的init.el文件,再其中添加以下內(nèi)容:


(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. 補全效果

放一張補全效果圖,感覺還是很強大的遗遵,畢竟是在這樣底層環(huán)境下實現(xiàn)的自動補全萍恕。


5. 常用Emacs命令

附一張常用Emacs命令,感覺概括了常用的命令车要,很不錯允粤。

emacs指南.png

希望本篇博客可以給使用Emacs編輯器的同學一些幫助。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末翼岁,一起剝皮案震驚了整個濱河市类垫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌登澜,老刑警劉巖阔挠,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異脑蠕,居然都是意外死亡,警方通過查閱死者的電腦和手機跪削,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門谴仙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碾盐,你說我怎么就攤上這事晃跺。” “怎么了毫玖?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵掀虎,是天一觀的道長。 經(jīng)常有香客問我付枫,道長烹玉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任阐滩,我火速辦了婚禮二打,結果婚禮上,老公的妹妹穿的比我還像新娘掂榔。我一直安慰自己继效,他們只是感情好症杏,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瑞信,像睡著了一般厉颤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凡简,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天逼友,我揣著相機與錄音,去河邊找鬼潘鲫。 笑死翁逞,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的溉仑。 我是一名探鬼主播挖函,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼浊竟!你這毒婦竟也來了怨喘?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤振定,失蹤者是張志新(化名)和其女友劉穎必怜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體后频,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡梳庆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了卑惜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膏执。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖露久,靈堂內(nèi)的尸體忽然破棺而出更米,到底是詐尸還是另有隱情,我是刑警寧澤毫痕,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站消请,受9級特大地震影響,放射性物質發(fā)生泄漏梯啤。R本人自食惡果不足惜竖伯,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望祟偷。 院中可真熱鬧,春花似錦打厘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽莽鸭。三九已至吗伤,卻和暖如春硫眨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背礁阁。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工巧号, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人姥闭。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓丹鸿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棚品。 傳聞我的和親對象是個殘疾皇子靠欢,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容