vim自動更新tag

來源:互聯網
上載者:User

標籤:vim   tag   ctags   

用vim瀏覽C/C++代碼時可以用ctags產生tag檔案,這樣可以很方便跳轉到函數定義的地方,這個功能幾乎所有的圖形介面編輯器都有,比如VS,source insight等等,但是vim的tags檔案是靜態,也就是說如果我們在原始碼裡新增了一些函數,原來的tags是不會自動更新的,我們也無法跳轉到新增的函數定義處,這個問題怎麼怎麼辦呢

我在網上搜尋了很多地方,普遍給的方案就是將ctags命令映射到一個快速鍵,這樣只需要按一下快速鍵就會產生新的tags檔案,但這樣有幾個不方便的地方

  1. 每次tags檔案都是全量產生,如果工程很大,產生tags檔案可能需要十多秒,而運行命令的過程中是不能編輯檔案的,也不可能每次修改檔案都去更新tags
  2. vim下運行ctags命令其實是在命令模式下輸入!ctags -R .,它會在vim的工作目錄下產生tags檔案,而如果你當前工作目錄並不是你想要產生tags的目錄,還得切換目錄

總之是,想要自動更新tags,沒有這麼簡單的事兒!

但是VS和source insight就可以做到,我們秉著凡是其它編輯器能實現的功能vim都能實現的原則來分析下問題的實質,其實不管是VS還是source insight它們都需要建立工程,然後將原始碼匯入工程,我們可以猜想到這些編輯器會對工程裡的源檔案建立索引,這樣就可以實現各種跳轉功能,當有代碼更新或是新增源檔案時,編輯器自然也可以檢測到,這時它暗地裡對源檔案重建立立索引,我們就可以對新增的函數進行跳轉。既然編輯器可以暗地裡做很多事,我們為何不也這樣呢,電腦的處理器大多數時候都是閒置,不用白不用

試想我們在Linux下有一堆原始碼,我們需要經常編輯和閱讀這些代碼,它的根目錄結構應該是這樣的

├── auto_tags├── build├── common├── include├── libs├── message├── metadata├── network├── nodes├── privacy├── tags└── tests

其中tags檔案是對目前的目錄下的代碼生產的tag,其它目錄存放的則是你的原始碼,這樣當我們開啟目錄下的原始碼時,vim就可以根據tags檔案來定位變數的位置

這裡的auto_tags目錄存放的是自己實現的指令碼,它的功能是自動檢測目前的目錄下的原始碼是否有更新,如果有,則生產新的tags檔案並替換老的,auto_tags目錄結構如下

├── auto_tags.conf├── auto_tags.sh└── run_tags.sh

auto_tags.conf為設定檔,配置項如下

CTAGS=/usr/bin/ctags# 產生tags檔案存放的目錄tags_dir=../# 原始碼所在目錄source_root=../# 需要建立tags的目錄名,注意只有目錄名字,不是路徑source_dirs="common message nodes"# 日誌相關max_log_size=10 # Unit: Mblog_file="auto_tags.log"

將source_dirs變數替換為你需要建立tags的目錄名稱即可,注意需要用雙引號包圍,且唯寫目錄名字,不需要添加../

使用方式如下

 sh ./run_tags.sh start : 啟動指令碼 sh ./run_tags.sh stop  : 停止指令碼

核心指令碼是auto_tags.sh,至於指令碼是如何?的就不貼出來了,畢竟這隻是一個程式員自娛自樂實現的一個小小的功能,它並不完善但簡單易用。github地址如下

https://github.com/handy1989/vim/tree/master/auto_tags

The end…

vim自動更新tag

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.