Cscope在emacs中的配置與使用

2021-06-07 05:35:51 字數 3883 閱讀 5962

在windows下通常使用source insight閱讀源**,本人希望將這項工作轉移到linux下面。在配置並試用vim一段時間後,感覺不是特別滿意。幸運的是,這個挑剔的人並不懶惰,開始嘗試使用強大的emacs。在這裡,並不介紹emacs的基本操作以及配置,建議學習emacs自帶的幫助或者閱讀《學習gnu emacs》,而是與大家分享cscope在emacs中的配置與使用。

作為菜鳥在開源世界旅行的第一站,即本人的第一篇linux學習筆記,決定向大牛們學習,在正文開始之前註明文章版權和參考文獻,畢竟水文也可以有版權:) 希望本文對您有所幫助,也歡迎您給我提意見和建議。我的郵箱是:[email protected]

1.版權說明

2.參考文獻

cscope-indexer指令碼和xcscope.el檔案的注釋部分

cscope

簡介 對於瀏覽源**來說,在 emacs 裡面也有很多任務具可用,比如自帶的 etags 就不錯,不過功能不如 cscope 強大。它最初是由 bell 實驗室開發,並且多年以來一直是 at&t unix 商業發行版的一部分。它已經被用於管理超過兩千萬行**的工程。在2023年4月,多虧了 santa cruz operation, inc. (sco) , cscope 的源**在 bsd license 下開放了源**blah~blah~

使用cscope,主要用來回答以下問題:

where is this variable used?

what is the value of this preprocessor symbol?

where is this function in the source files?

what functions call this function?

what functions are called by this function?

where does the message "out of space" come from?

where is this source file in the directory structure?

what files include this header file?

安裝和配置

1.首先,在系統中安裝cscope。linux下,安裝軟體的方式通常有兩種:

./configure

make

make install

cscope的原始碼包裡面有個xcscope.el檔案,為(x)emacs提供了cscope 介面。它處於原始碼包的 contrib/xcscope 目錄下。該目錄下面還有乙個名為cscope-indexer的指令碼檔案,用於建立檔案列表和資料庫。

方式二:利用linux發行版的軟體管理工具進行安裝。我使用的是jaunty jackalope(ubuntu 9.04),只要一條命令,解決所有問題。

sudo apt-get install cscope

安裝後,cscope-indexer指令碼位於/usr/bin目錄下,xcscope.el被置於emacs預設的load-path下,在我的系統中是/usr/share/emacs/site-lisp。

2.為了能夠執行cscope-indexer指令碼,需要將它放到path變數指向的資料夾下,如/usr/bin,並確認該指令碼具有執行許可權。

3.把xcscope.el檔案放到系統使用者的load-path下。為系統使用者建立資料夾並將其加入load-path的方法是:先建立資料夾,

mkdir -p ~/.emacs.d/site-lisp/

然後,在emacs的配置檔案~/.emacs中新增

;;load_path       

(add-to-list 'load-path' "~/.emacs.d/site-lisp")

如果沒有該檔案,請手動建立。

4.在.emacs檔案中加入下面的語句

(require 'xcscope)

或者,你希望只在開啟c/c++檔案的時候才載入xcscope,可以加入

(add-hook 'c-mode-common-hook '(lambda() (require 'xcscope)))

5.xcscope預設的快捷鍵都是繫結到c-c s的字首上面,如果你經常使用xcscope.el,可以自己進行按鍵繫結,減少擊鍵次數。不要擔心別人笑你懶,xcscope.el的編寫者就鼓勵我們這樣做:-)。具體方法是,在.emacs檔案中加入

(define-key global-map [(control f3)]  'cscope-set-initial-directory)

(define-key global-map [(control f4)]  'cscope-unset-initial-directory)

(define-key global-map [(control f5)]  'cscope-find-this-symbol)

(define-key global-map [(control f6)]  'cscope-find-global-definition)

(define-key global-map [(control f7)]  'cscope-find-global-definition-no-prompting)

(define-key global-map [(control f8)]  'cscope-pop-mark)

(define-key global-map [(control f9)]  'cscope-next-symbol)

(define-key global-map [(control f10)] 'cscope-next-file)

(define-key global-map [(control f11)] 'cscope-prev-symbol)

(define-key global-map [(control f12)] 'cscope-prev-file)

(define-key global-map [(meta f9)]     'cscope-display-buffer)

(define-key global-map [(meta f10)]    'cscope-display-buffer-toggle)

6.重啟emacs,使配置生效。

基本使用

這裡以核心原始碼為例,介紹cscope的基本用法。

1.首先,在原始碼根目錄下,如~/kernerl/linux-2.6.29.3,利用cscope-indexer指令碼生成檔案列表和資料庫,方法是執行

cscope-indexer -r

-r引數表示遞迴檢索子目錄,檔案列表和資料庫的預設檔名分別為cscope.files和cscope.out,可以使用-i,-f引數進行修改,請參考man了解指令碼引數用法。

2.激動人心的時刻到了。用emacs開啟init/main.c,c-s搜尋sched_init函式,將游標停在函式名上,按c-c s d或者先前設定的ctrl+f6,回車進行查詢。結果居然用了35.32秒,汗!原來,cscope預設在每次進行查詢時更新cscope.out。當工程十分龐大時,建議關閉該選項以提高查詢速度。方法是在~/.emacs檔案中加入

(setq cscope-do-not-update-database t)

重複上述操作,結果仍然用了9.89秒,再汗!莫非是我的古董本太慢?

cscope -b -i $list_file -f $database_file

替換為cscope -q -b -i $list_file -f $database_file

進入核心根目錄,刪除先前的檔案列表和資料庫,重新呼叫cscope-indexer。這回多生成了兩個檔案,cscope.in.out和cscope.po.out。重試剛才的查詢,結果只用了0.08秒,大功告成。

在emacs中打造python開發環境

參考文章 用emacs中進行python開發,總是感覺有點力不從心。按照網上的教程對於emacs進行了改造。先用著再說吧 使用的外掛程式有yasnippet,autocomplete,rope and ropemacs,pycomplete electric等 對於yasnippet和autocom...

Emacs 中的正則替換

emacs 中的正規表示式與通用型基本類似,不過就是在使用的過程中發現有三個細節有所不同,或許還有更多以後再進行補充。1.括號使用做分組形式,括號前必須加轉義符號 2.回車符輸入老是出現錯誤 可以使用c q c j來插入。3.字符集 通常在字符集中的特殊字元不再特殊,而在字符集中的 和 卻是特殊字元...

Emacs中的拼寫檢查

無論是在emacs中寫英文日記 diary org mode筆記,還是撰寫程式的注釋和文件,拼寫檢查都是一項提高工作效率 保證成果品質的必不可缺的工具。拼寫檢查對於常見的文字處理軟體 如word libreoffice 來說並不是什麼稀罕的功能,但是對於emacs這個純粹的文字編輯器來說,實現起來就...