vim下ctags的安裝和使用基礎

最近幫老師當助教,順便接觸了一下vim和ctags,說實話,linux以前用的不太多,除了寫過幾個網絡實驗箱的驅動程序以外基本上沒怎麼用過,所以這次也算是個很好的機會吧。

對linux稍加熟悉的同學都肯定知道Vi命令,這個是linux自帶的編輯工具,應該相當於windows的記事本吧,所謂vim,是一個類似於Vi的文本編輯器,不過在Vi的基礎上增加了很多新的特性,Vim普遍被推崇爲類Vi編輯器中最好的一個,事實上Vim真正的勁敵來自Emacs的不同變體。1999 年Emacs被選爲Linuxworld文本編輯分類的優勝者,Vim屈居第二。但在2000年2月Vim贏得了Slashdot Beanie的最佳開放源代碼編輯器大獎,又將Emacs推至二線,總的來看,Vim和Emacs同樣都是非常優秀的文本編輯器。我記得有個NB的師兄曾經對我說過,在程序員的世界裏,Vim和Emacs分別被稱之爲“神的編輯器”和“編輯器之神”,只是時間長了我現在記不清他倆是怎樣一個對應關係了。

廢話說了不少了,下面說說ctags,摘抄一段維基百科上的定義,幫助理解,“Ctags是一個用於從程序源代碼樹產生索引文件(或tag文件),從而便於文本編輯器來實現快速定位的實用工具”。在產生的tag文件中,每一個tag的入口指向了一個編程語言的對象。這個對象可以是變量定義、函數、類或其他的物件。Ctags是開放源代碼的程序。支持Ctags產生的tag文件的編輯器以及編輯器插件包括:Vim,Vile,Lemmy,等等。

下面簡單說下ctags的安裝,其實在linux下就一句命令:apt-get install ctags,和linux下其他軟件的安裝一樣,簡單吧!當然,可能有時候由於源或者其他東西的原因,你可能單靠這一句命令還搞不定,這時候我推薦一種看起來很笨的方法,不過該方法確實好用,上週五上機的時候有一位同學就碰到了這樣的問題,我的方法就是到官方網站上(http://ctags.sourceforge.net/)下載安裝包,然後解壓,執行./configure,然後make,make install就OK了,這樣安裝一般不會有別的問題了。

下面簡單說下ctags文件,這可是ctags的核心啊,首先需要執行ctags -R --c++-kinds=+px --fields=+iaS --extra=+q .生成一個tags文件,雖然有一大串的參數,但是其實我們使用的時候直接使用ctags -R .就OK,其中參數R表示遞歸,.表示所有文件,簡單來說就是在當前目錄下遞歸的對所有代碼文件構建源代碼樹(存儲在tags文件中),執行完這個命令以後就可以在當前文件夾下看到生成了一個tags文件,就是這個文件記錄了你所有的代碼結構,有興趣的同學可以打開這個文件看一下,每一行大概的結構是類似這樣的:A file.c 12;" d;下面具體解釋一下,A就是代碼結構樹中的標示符(變量、結構體或是函數名稱等),file.c就是這個標示符(變量或是結構體、函數等)所在的文件名稱,可想而知,隨後的12就表示在這個文件中的行數,注意,在行號後面有一個很明顯的分隔符(;"),一開始我也沒搞懂這個分隔符到底有什麼作用,後來查了一下,說是爲了兼容Vi,讓Vi忽略後面的字段(目測Vi遇到這個符號就不會再讀取後面的字段了),後面的d表示這個標示符的類型,比如究竟是普通變量,還是函數名稱等,其實這個字段是可以省略的,只不過在生成tags文件的時候都自動生成了。

瞭解了tags文件,下面該真正進入核心瞭解怎樣使用ctags了。在生成了tags文件之後,就可以在使用vim的時候使用ctags的功能了,最常用的操作就是快捷鍵ctrl+]和ctrl+t,如果你在編輯模式下將光標定位到某個標示符,然後進入vim命令模式下按快捷鍵ctrl+],就會跳轉到改標示符的定義,然後通過ctrl+t就會跳轉回到上一個位置。當然,你可能會發現按照上面說的很可能不會成功,這是爲什麼呢?原因就在於vim很可能沒有辦法知道tags文件的存在,又或者你生成的tags文件中並不包括所要編輯的文件的代碼結構信息。針對第一種情況,上面我說的之所以成功就在於你要通過vim編輯的文件和生成的tags文件存在同一個目錄下,這樣的情況下Vim當然可以很方便的就找到tags文件,所以它能夠自動的使用tags文件中的信息實現跳轉,如果你的tags文件和要編輯的文件不在同一個文件夾下,那麼就需要通過配置Vim來實現,通俗的講,就是要告訴Vim上哪裏去找tags文件,實現的方法比較多,且聽我一一道來,第一種,如果你只是臨時的使用一次ctags跳轉,那麼你完全可以在vim命令模式下使用:set tags=../tags之類的命令來實現,這個命令就是告訴Vim:在我本次編輯過程中如果我要使用ctags跳轉,你就上../tags去找相關的信息就行了(../tags就是你存放的tags文件),這種方法的不便之處就是當你完成本次編輯之後推出保存,下一次編輯同樣的文本的時候,Vim又會出現找不到tags的問題,也就是說你告訴它一次只能使用到本次編輯結束(關閉編輯)它就忘記了,爲了能夠讓Vim“永遠”記住tags文件的位置,我們介紹第二個方法,那就是直接邊界.vimrc文件,相信稍微瞭解vim的人都知道這個文件,話說我一個哥們兒曾經就因爲丟失了這個文件捶胸頓足整整兩天!!!這就是整個Vim的核心配置文件,只需要在其中加入一句話就可以了:set tags+=steve/tags;其中steve/tags改成你的tags文件所在的位置就可以了,這樣在每次使用vim的時候他就能自動找到tags文件實現跳轉了。

下面說一些可能用的不多的,網上很多帖子建議大家map一個快捷鍵生成tags文件,其實我不是很建議大家這麼做,如果只是一般的代碼調試,也沒必要爲了圖這點兒方便重新去記衆多的組合快捷鍵,另一方面,如果設定了這樣一個快捷鍵,可能你會習慣性的在每個文件夾下都生成一個tags文件,其實在一個項目中有一個整體的tags就足夠了(可能有些人不同意這個觀點)。

最後補一句,晚上抽空寫的第一篇博客,可能有些東西寫的不夠好,以後慢慢改吧,歡迎交流!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章