Vim 搭配 ctags 產生的 tags 檔案,可實現函數/變數/巨集定義跳轉,是大型專案 (如 Linux 核心) 閱讀程式碼的利器。
cd /path/to/kernel/source
make tags
此命令會遞迴掃描專案原始碼,在當前目錄產生 tags 檔案 (需專案 Makefile 支援 tags 目標,Linux 核心預設支援)。
編輯系統層級 Vim 設定檔 /etc/vim/vimrc (或個人 ~/.vimrc),加入:
set tags=/path/to/kernel/source/tags
若專案有多層目錄,亦可設定遞迴向上查找:
set tags=./tags,./../tags,./../../tags
| 指令/按鍵 | 功能 |
|---|---|
| Ctrl-] | 跳轉至游標下關鍵字的定義 |
| Ctrl-t | 返回上一個跳轉位置 (標籤堆疊) |
:tag <name> | 跳轉至指定標籤定義 |
:ts <name> | 列出同名標籤清單供選擇 |
:tags | 顯示標籤堆疊歷程 |
| Ctrl-w } | 在新分割視窗開啟定義 |
.vimrc 使用 set tags+=/path/other/tags 疊加多個 tags 檔。autocmd BufWritePost * silent! make -C /path/to/project tags >/dev/null 2>&1 存檔自動重建 (需專案支援)。cscope -Rbq 產生 cscope.out,Vim 中 :cs add cscope.out 可進行更豐富的呼叫圖、被呼叫者搜尋。make tags 需專案建置系統支援;若無 Makefile,可直接執行 ctags -R . 於專案根目錄 (需安裝 exuberant-ctags 或 universal-ctags)。