在Emacs中使用CEDET

2021-04-30 14:15:15 字數 4155 閱讀 5261

by:

潘雲登

對於商業目的下對本文的任何行為需經作者同意。

寫在前面

cedet

是collection of emacs development environment tools

的縮寫,用以將

emacs

改裝成高階的程式開發工具。它提供了豐富多彩的功能,如工程管理,智慧型補全,**生成,

uml圖等等。這裡,介紹一些平時程式設計中最常使用的三個功能:**補全,查詢定義和查詢引用。

本文主要參考:

cedet

主頁,《

a gentle introduction to cedet

》,以及曹樂的《

在emacs

下用c/c++

程式設計》。

安裝cedet

cedet

~/.emacs.d/site-lisp

。在終端下,進入解壓後的資料夾,執行下面的命令,進行編譯。

make emacs=emacs

在.emacs

檔案中加入如下內容,載入

cedet。

(load-file "~/.emacs.d/site-lisp/cedet-1.0pre6/common/cedet.el")

配置cedet

這裡,將要使用的三個功能是通過執行

cedet

定義的不同命令來完成的,所以往

.emacs

配置檔案中加入的主要是這些命令的按鍵繫結。另外,開啟了乙個**摺疊功能,對閱讀較長檔案略有幫助。現在,一併給出需要在

.emacs

中新增的內容,相關作用以注釋形式給出,稍後再詳細說明。

;;;;

具體說明可參考原始碼包下的

install

檔案,或《

a gentle introduction to cedet

》 ;; enabling semantic (code-parsing, smart completion) features

;; select one of the following:

;;(semantic-load-enable-minimum-features)

;;(semantic-load-enable-code-helpers)

;;(semantic-load-enable-gaudy-code-helpers)

(semantic-load-enable-excessive-code-helpers)

;;(semantic-load-enable-semantic-debugging-helpers)

;;;;

使函式體能夠摺疊或展開

;; enable source code folding

(global-semantic-tag-folding-mode 1)

;; key bindings

(defun my-cedet-hook ()

(local-set-key [(control return)] 'semantic-ia-complete-symbol)

(local-set-key "/c-c?" 'semantic-ia-complete-symbol-menu)

(local-set-key "/c-cd" 'semantic-ia-fast-jump)

(local-set-key "/c-cr" 'semantic-symref-symbol)

(local-set-key "/c-cr" 'semantic-symref))

(add-hook 'c-mode-common-hook 'my-cedet-hook)

;;;;

當輸入"."

或">"

時,在另乙個視窗中列出結構體或類的成員

(defun my-c-mode-cedet-hook ()

(local-set-key "." 'semantic-complete-self-insert)

(local-set-key ">" 'semantic-complete-self-insert))

(add-hook 'c-mode-common-hook 'my-c-mode-cedet-hook)

對於五種模式,後一種總是包含前一種的功能。其具體作用不甚了解,唯一可以觀察到的是,當游標停留在函式呼叫上時,如

printf

,能夠顯示函式原型。

semantic-load-enable-gaudy-code-helpers

與semantic-load-enable-excessive-code-helpers

的區別在於,前者將函式原型顯示在緩衝區頂部,後者顯示在狀態列。

**補全,使用

semantic-ia-complete-symbol

和semantic-ia-complete-symbol-menu

命令,後者以彈出選單形式顯示所有可能的選項。這裡的補全主要是針對函式名和變數名。

查詢定義和引用,分別使用

semantic-ia-fast-jump

和semantic-symref-symbol

,semantic-symref

命令。semantic-symref-symbol

請求輸入要查詢的符號,

semantic-symref

則查詢游標所在處的符號。之前使用

cscope

完成此類工作(可參考《

cscope

在emacs

中的配置與使用

》)。cscope

常用來閱讀大型工程的原始碼,如

linux

核心。相比之下,

semantic

更加輕便,無須額外的資料庫檔案,更適於平時的程式設計工作。它可以查詢到庫標頭檔案中的函式宣告。遺憾的是,無法查詢到上層資料夾中的內容。目前沒有找到解決辦法,先將就用吧:)

更強大的**補全

semantic

的補全基於程式設計語義,

emacs

自帶的hippie-expand

則提供更為強大的編輯補全功能。這裡,直接將曹樂的配置內容新增到

.emacs

檔案中。

;;;;

自動補齊策略

(defun my-indent-or-complete ()

(interactive)

(if (looking-at "//>")

(hippie-expand nil)

(indent-for-tab-command))

)(global-set-key [(control tab)] 'my-indent-or-complete)

(autoload 'senator-try-expand-semantic "senator")

(setq hippie-expand-try-functions-list

'(senator-try-expand-semantic

try-expand-dabbrev

try-expand-dabbrev-visible

try-expand-dabbrev-all-buffers

try-expand-dabbrev-from-kill

try-expand-list

try-expand-list-all-buffers

try-expand-line

try-expand-line-all-buffers

try-complete-file-name-partially

try-complete-file-name

try-expand-whole-kill))

在 Emacs 中使用 rime 輸入法

在 emacs 中使用外部輸入法,最大的問題是在切換 evil 的模式的時候,對輸入來說會有延遲,因為需要手工將輸入法切換到對應的英文模式,才能正常使用快捷鍵。但是如果使用的是 emacs 自己的輸入功能,則不需要做這些同步,只需要從 insert 模式中退出即可,這種操作對 emacs 來說真的是...

Emacs中使用purcell大師的配置檔案

工作原因,經常要頻繁編輯一些零碎的配置檔案,所以又想起來很久沒用的emacs mac自帶的emacs,有一些問題,比如選中的區域沒有高亮顯示,其實已經被選中了,還有一些其它用著不爽的原因,又去下了emacs version24.3 這次也不像以前那樣,搞乙個.emacs檔案,然後各種嘗試增加小配置了...

在中使用SQLDMO

曾幾何時,夥伴們為的公升級傷透了腦筋.往往程式的公升級趕不上資料庫的公升級 版本控制的好,這也許不是什麼問題,但對於很大一部分中國公司來說這是無法避免的 而有些n久以前的資料庫要使用新程式的時候,資料庫的公升級簡直就是無從下手.所以對比資料庫公升級的緊要性就逐漸的凸現出來.對於表和字段的公升級按道理...