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久以前的資料庫要使用新程式的時候,資料庫的公升級簡直就是無從下手.所以對比資料庫公升級的緊要性就逐漸的凸現出來.對於表和字段的公升級按道理...