vim 的 tags 模組 與 ctags

來源:互聯網
上載者:User

標籤:style   blog   color   使用   檔案   for   

1. 概述

一般來說,在代碼中跳轉,離不開 ctags。

實際上,vim 中代碼跳轉是由 vim tags 模組完成的,tags 模組依賴於 tags 檔案。

ctags(Generate tag files for source code) 是產生 tags 檔案的。

tags 檔案只包含了函數、類、變數的定義的資訊,而沒有包含使用資訊。

如果要知道一個函數都在什麼地方使用過,需要使用 cscope。

2. tags 檔案的產生與更新

ctags 預設是不會自動產生 ctags 檔案的,常用的 3 個產生命令如下:

$ ctags *$ ctags -R$ ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
  • -R: 迴圈產生子目錄的 tags
  • *: 目前的目錄下的所有檔案,不遞迴
  • –c++-kinds=+px : 記錄 c++ 檔案中的函式宣告和各種外部和前向聲明
  • –fields=+iaS : ctags 要求描述的資訊,其中i表示如果有繼承,則標識出父類;a 表示如果元素是類成員的話,要標明其調用許可權(即是 public 還是 private);S 表示如果是函數,則標識函數的 signature。
  • –extra=+q: 強制要求ctags做如下操作—如果某個文法元素是類的一個成員,ctags預設會給其記錄一行,可以要求ctags對同一個文法元素再記一行,這樣可以保證在VIM中多個同名函數可以通過路徑不同來區分。
3. 常見功能與快速鍵

詳細的說明,見 vim 的 tags 協助文檔。

:help tags

命令、快速鍵、功能描述如下:

  • CTRL+]        :tag tagname     跳轉到定義處
  • CTRL-W ]     :stag tagname    新視窗中開啟並跳轉到定義處。split 後執行  tag tagname
  • CTRL+T                               CTRL+] 的反操作,向回跳轉。類似 CTRL+o,區別在於,CTRL+o 的跳轉不局限於 CTRL+] 構成的調用樹。

對於存在多個匹配的 tag(如, 在 .h 和  .cpp 中都聲明或者定義的方法名):

  • :ts[elect]                 列出所有匹配的 tag
  • :[count]tp[revious]  跳轉至前 count 個 tag 處。
  • :[count]tn[ext]        跳轉至後 count 個 tag 處。
4. Vim + ctags 配置
set tags=tags;  # ; 不可省略,表示若目前的目錄中不存在tags, 則在父目錄中尋找。map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR> 
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.