emacs中etags等的使用

2021-05-11 14:06:58 字數 1701 閱讀 9498

在windows下常用的源**檢視工具是source inside。在linux下我習慣用用etags、gtags、grep來檢視源**。

etags用於生成tags檔案來提供emacs快速瀏覽c/c++源**,它的最大作用就是能夠快速跳轉到函式定義、巨集定義、資料結構定義、全域性變數定義等。

etags常常和find命令一同使用來生成tags檔案,如下所示:

find . -name '*.[ch]' | xargs etags -a

etags常用命令:

m-visit-tags-table:選擇生成tags檔案,

m-tags-reset-tags-tables:重新設定tag table

m-. 查詢乙個tag,比如函式定義型別定義等。

c-u m-. 查詢下乙個tag的位置

m-* 回到上一次執行m-.前的游標位置。

.emacs中加入這樣的語句:

(setq tags-file-name /usr/src/linux/tags")

這樣emacs就會自動讀取這個tags檔案的內容。

對於一些project,makefile裡已經做好了這一步,例如對工程glibc,執行make -f maketags

有了etags,為什麼還要gtags?

你可能會遇到這樣的情況:有乙個函式myfunction,在工程的源**裡被呼叫了十幾次,你想把 它們都找出來,這時候,etags只能找到它的定義,並不能找到它的呼叫。而使用gtags就能夠實現這樣的功能(當然,還有很多的辦法)。

要使用gtags,首先要裝global包:

apt-get install global

接著在project是目錄下執行:

gtags

你會發現在當前目錄多了幾個檔案:gpath、grtags、gsyms、gtags。它們就是用於在原始檔之間快速跳轉。

在emacs裡進入到gtags模式,執行「m-x gtags-mode」。

這樣就可以使用「gtags-find-pattern」和「gtags-find-symbol」來查詢函式呼叫和宣告以及符號宣告。

cscope

cscope只針對c語言。

sudo apt-get install cscope

在.emacs裡加入這一句:

(require 'xcscope)

在工程的目錄裡設定cscope的工作目錄,並在該目錄下生成cscope.file和scope.out檔案:

m-x cscope-set-initial-directory

m-x cscope-create-list-of-files-to-index

好了,如果要找乙個符號的定義,那麼就執行:

m-x cscope-find-global-definition

找呼叫某個函式的函式,執行:

m-x cscope-find-functions-calling-this-function

c-c s c-h 能找到更多關係cscope的命令。

grep也是乙個很好的**查詢工具。例如在乙個工程裡查詢函式名就schedule的函式的定義以及引用,

grep -n -e schedule -r --include=*.[hc] .

如圖所示:

小結:配合使用etags的「find-tag」(也就是m-.)命令和gtags的「gtags-find-symbol」命令、rgrep命令,能夠更方便、快捷地查詢源**。

emacs的簡單使用

markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細語法參考幫助?本編輯器支援markdown extra,擴充套件了很多好用的功能。具體請參考...

Cscope在emacs中的配置與使用

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

Emacs中巨集的基本使用方法

巨集,即macro,是文字編輯器中乙個非常廣泛的使用技巧。比如有下面一段文字,我們需要把前面的注釋 即 全部去掉,怎麼辦呢?require worklog setq worklog automatic login t add hook emacs startup hook function lamb...