usage: $ctags [-R] inc_dir/*.h include_dir/*.hpp src_dir/*.c
example: $ ctags -R `find . -name "*.c"` `find . -name "*.h"`
su; cd /usr/include; ctags --c-types=+p+x -sort -R
產生非常完整,巨大而有序的tags
各使用者在 ~/.vimrc中添加set tags= ./tags, tags, /usr/include/tags即可使用
[注1]+p開關會跳到變數聲明的地方而不是它的實現,所以還是採用預設值,
不要--c-types這個選項,或者只要+x(推薦),其它無所謂。
還有/usr/include並不是/usr/src/linux/include的一個符號連結,
所以如果是看核心中一些變數的定義的話應該到/usr/src/linux上面用ctagsctags瀏覽代碼 (有的命令說明可能不準確)
:set tags=/Dir/tags 設定需要的tags檔案,
可以多個:set tags=/dir1/tags, /dir2/tags
:tag xxx 轉到滿足尋找代碼的定義處,簡寫為 :ta xxx
:tag /^xxx 轉到以xxx為起始的tag處
other find tags :stag/ptag/ts/tj/pts/ptj /<pat>
:tag /xxx 列出所有包含xxx的tag
:tag 轉到前一個瀏覽過的tag處
vi -t xxx 直接定位到xxx的定義處
:tn / :tp 轉到下/上一個tag代碼處,可以使用:5tn的形式
:tr / :tl 轉到首/尾tag代碼處
<C-]>, <C-左鍵> 轉到游標所在函數或者變數的定義處 g+左鍵 (GUI) [注2]
<C-T>, <C-右鍵> 回到跳轉前的代碼處(適用於任何跳轉) g+右鍵 (GUI)
:tags 列出當前tag棧的內容
:ts xxx 列出所有匹配的代碼及其所屬檔案,並提供選擇瀏覽
:sts xxx 列出匹配處提供選擇在新視窗中開啟檔案
:tj xxx 類似 :ts xxx,當只有一個匹配時直接轉到代碼處
g] 與 :ts xxx 功能相同(tag為游標下的標識符)
<C-w> g] 等價於 :sts xxx
g <C-]> 等價於 :tj xxx
:pt? xxx 提供上述命令(?為j,s)的預覽功能,退出視窗 :q!
:t?! xxx 當前檔案的修改被丟棄轉到目標檔案中
<C-w> } 在預覽視窗中顯示當前游標下的tag
:ptl / ptf / ptn /ptp 類似於 tl,tf,tn,tp
:che 察看沒有找到的標頭檔(checkpath)
makeprg :set makeprg=gcc/ yourfile.c 為線上編譯設定
:make 線上編譯
:cn / :cN 移動到編譯的 下/上 一個error處
:stag xxx 尋找xxx的聲明處並在新視窗中開啟
:ta {ident} 跳轉到標識符定義處
gd 跳轉到局部標識符定義處[注2] Ctrl-]碰巧是telnet的終端符,如果遠程編輯檔案可能會遇到一些問題,
請參考線上協助:h ^]。多數telnet都允許使用命令telnet -E hostname來開啟
或關閉該脫字元,或者用telnet -e escape hostname來指定另外一個脫字元
來代替^],請man telnet參看-E -e的協助。