Emacs+auto-complete+clang進(jìn)行代碼補(bǔ)全

Clang是一個(gè)C/C++/ObjectC語言的編譯器前端鄙才,采用LLVM作為后端提供了一個(gè)性能接近GCC的編譯器。不過我們現(xiàn)在的目標(biāo)是使用Clang幫助進(jìn)行代碼分析和補(bǔ)全攒庵。

首先去Clang的官方網(wǎng)站下載一套編譯安裝,官方網(wǎng)站地址是:http://clang.llvm.org/

接下來需要安裝auto-complete栽渴,下載一份,http://cx4a.org/software/auto-complete/慢味,解壓縮后墅冷,安裝,只需要load-file install.el然后按照提示復(fù)制4行到.emacs文件即完成了安裝寞忿。

接下來是auto-complete的clang插件腔彰,下載地址,https://github.com/brianjcj/auto-complete-clang
解壓縮到任何地方霹抛,并將該路徑add-to-list,例如:
[plain] view plaincopyprint?
(add-to-list 'load-path "~/.mylisp/")

接下來做一些配置恃逻,按照給出的模板進(jìn)行修改即可:
[plain] view plaincopyprint?
(require 'auto-complete-clang)
(setq ac-clang-auto-save t)
(setq ac-auto-start t)
(setq ac-quick-help-delay 0.5)
;; (ac-set-trigger-key "TAB")
;; (define-key ac-mode-map [(control tab)] 'auto-complete)
(define-key ac-mode-map [(control tab)] 'auto-complete)
(defun my-ac-config ()
(setq ac-clang-flags
(mapcar(lambda (item)(concat "-I" item))
(split-string
"
/usr/include/c++/4.4
/usr/include/c++/4.4/i486-linux-gnu
/usr/include/c++/4.4/backward
/usr/local/include
/usr/lib/gcc/i486-linux-gnu/4.4.5/include
/usr/lib/gcc/i486-linux-gnu/4.4.5/include-fixed
/usr/include/i486-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)

需要說明的幾點(diǎn)是:
ac-clang-flags是頭文件的目錄,根據(jù)系統(tǒng)的不同可能你的頭文件目錄也會(huì)不同凸郑,列出系統(tǒng)中所有的頭文件目錄方法是:
[plain] view plaincopyprint?
$ echo "" | g++ -v -x c++ -E -

你可能會(huì)找到類似這樣的行:
[plain] view plaincopyprint?

include "..." search starts here:

include <...> search starts here:

/usr/include/c++/4.4
/usr/include/c++/4.4/i486-linux-gnu
/usr/include/c++/4.4/backward
/usr/local/include
/usr/lib/gcc/i486-linux-gnu/4.4.5/include
/usr/lib/gcc/i486-linux-gnu/4.4.5/include-fixed
/usr/include/i486-linux-gnu
/usr/include
End of search list.

中間列出的那些目錄就是你需要的芙沥,替換上面代碼中的目錄即可

ac-auto-start參數(shù)是ac的提示是否自動(dòng)啟動(dòng),如果不自動(dòng)啟動(dòng)的話救氯,將它設(shè)為nil即可歌憨,你需要補(bǔ)全的時(shí)候自己按快捷鍵進(jìn)行補(bǔ)全,快捷鍵的設(shè)置方法是:
[plain] view plaincopyprint?
(define-key ac-mode-map [(control tab)] 'auto-complete)

如果這一項(xiàng)設(shè)置為t务嫡,ac則會(huì)自動(dòng)在有補(bǔ)全的地方列出可補(bǔ)全的項(xiàng)漆改。

有的機(jī)器使用的是舊版本的clang准谚,比如假如你使用某個(gè)古代發(fā)行版自帶的舊版本clang,不支持通過stdio進(jìn)行交互樊破,則需要自動(dòng)保存文件才能正確調(diào)用clang獲取補(bǔ)全提示唆铐,設(shè)置的方法是:
[plain] view plaincopyprint?
(setq ac-clang-auto-save t)

當(dāng)然新版本的clang可能就不需要這一項(xiàng)了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末惫恼,一起剝皮案震驚了整個(gè)濱河市澳盐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌腕窥,老刑警劉巖筛婉,帶你破解...
    沈念sama閱讀 221,331評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異入蛆,居然都是意外死亡硕勿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門扼褪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粱栖,“玉大人,你說我怎么就攤上這事幔崖。” “怎么了岖瑰?”我有些...
    開封第一講書人閱讀 167,755評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵蹋订,是天一觀的道長。 經(jīng)常有香客問我露戒,道長,這世上最難降的妖魔是什么动漾? 我笑而不...
    開封第一講書人閱讀 59,528評(píng)論 1 296
  • 正文 為了忘掉前任旱眯,我火速辦了婚禮证九,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘愧怜。我一直安慰自己,他們只是感情好蓬蝶,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,526評(píng)論 6 397
  • 文/花漫 我一把揭開白布猜惋。 她就那樣靜靜地躺著,像睡著了一般著摔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,166評(píng)論 1 308
  • 那天卧波,我揣著相機(jī)與錄音庇茫,去河邊找鬼。 笑死查坪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的偿曙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,768評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼罩阵,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼启摄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起傅是,我...
    開封第一講書人閱讀 39,664評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蕾羊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后溃斋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吸申,經(jīng)...
    沈念sama閱讀 46,205評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,290評(píng)論 3 340
  • 正文 我和宋清朗相戀三年梳侨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了日丹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,435評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡丙躏,死狀恐怖束凑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情废恋,我是刑警寧澤,帶...
    沈念sama閱讀 36,126評(píng)論 5 349
  • 正文 年R本政府宣布拟烫,位于F島的核電站迄本,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏岸梨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,804評(píng)論 3 333
  • 文/蒙蒙 一半开、第九天 我趴在偏房一處隱蔽的房頂上張望赃份。 院中可真熱鬧,春花似錦抓韩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惭聂,卻和暖如春相恃,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拦耐。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工杀糯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人火脉。 一個(gè)月前我還...
    沈念sama閱讀 48,818評(píng)論 3 376
  • 正文 我出身青樓倦挂,卻偏偏與公主長得像畸颅,于是被迫代替她去往敵國和親方援。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,442評(píng)論 2 359

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