天天看點

用vim替代source insight(ctags+taglist+)V im tags 的使用ctag 檔案的製作 一般的 tag 使用 在目錄樹中自由使用tag

用vim替代source insight(ctags+taglist+)
用vim替代source insight(ctags+taglist+)

V im tags 的使用

ctag 檔案的製作

不講究的話,可以在所解開的 source code 目錄下,下以下指令:
ctags -R *

這樣會有 source code 目錄下產生一個 tags 這個檔(可以使用 -f 選項來指定檔案名),裡頭就包含了整個 source code 的所有檔案的 tags 資訊,包括其下所有的子目錄下的檔案。ctags 已盡可能的做到聰明掃描檔案的能力,會忽略和程式碼無關的檔案。當然 ctags 還有許多精細的參數可以使用,請 man ctags 。

請注意,ctags 預設會將輸出檔排序,是以不必自行另外去排序。有排序有一個好處,那就是 V im 會去使用 binary search 的方式去搜尋,這樣會比較快。

一般的 tag 使用

如果就照上一節的方式產生 tag files,那麼隻要在 source code 目錄下由 vim 去開啟檔案的話,會自動載入 tags 這個檔案,無需另行載入,否則要由 :set tags=your.tags 來指定 tags 檔。然後就是照一般使用 V im 線上說明一樣,遊標移到識別字或函數名上,按 Ctrl+] ,要回到原處就按 Ctrl+T 。

請注意,V im 啟動時,工作目錄(vim 啟動時的所在目錄)名為 tags 的檔案會自動載入,$VIMRUNTIME/doc 及 $HOME/.vim/doc 目錄下的 tags 檔也會自動載入。而且,凡是載入的 tags 檔裡頭所有標誌文字都可以使用補全鍵來補全,別忘了這個好用的功能。

在目錄樹中自由使用tag

編輯vim的設定檔案(_vimrc或.vimrc),添加兩行

set tags=tags;

set autochdir

注意第一個指令裡的分号是必不可少的。這個指令讓vim首先在目前目錄裡尋找tags檔案,如果沒有找到tags檔案,或者沒有找到對應的目标,就到父目錄中查找,一直向上遞歸。因為tags檔案中記錄的路徑總是相對于tags檔案所在的路徑,是以要使用第二個設定項來改變vim的目前目錄。 使用這兩個技巧後,就可以在目錄樹中自由的浏覽源程式了。

讓你的vim能夠檢視函數清單(taglist)

圖形界面下的很多編輯軟體都可以列出目前編輯檔案中的函數清單,以便在編輯的時候能夠快速的跳轉。vim雖然沒有直接提供這種功能,但配合适當的工具和設定,可以完美的實作!

首先還是安裝,vim不用裝了,ubuntu中自帶,用到的ctags需要自己安裝一下,不要用舊的那個ctags,新的叫Exuberant Ctags ,apt安裝即可:apt-get install exuberant-ctags。

然後按照vim.org上的安裝說明 ,下載下傳taglist_45.zip,解壓到home目錄下的.vim子目錄中:

~/.vim$ unzip /home/fwolf/taglist_45.zip

Archive: /home/fwolf/taglist_45.zip

inflating: plugin/taglist.vim

inflating: doc/taglist.txt

進入$HOME/.vim/doc目錄,打開VIM 運作“helptags .”指令,注意後面的點不要拉了,這是為了生成ctags幫助檔案的索引,然後才能正常使用幫助。(原來vi幫助中的ctrl+]進傳入連結接、ctrl+T傳回也是這麼來的)

現在,再啟動vim,tags功能就可以用了:

用vim替代source insight(ctags+taglist+)V im tags 的使用ctag 檔案的製作 一般的 tag 使用 在目錄樹中自由使用tag

大概用法:

在使用vim的時候,使用:Tlist指令切換函數清單的開、關。

按住ctrl鍵然後按兩下w鍵在正常編輯區域和tags區域中切換。

在tags區域中,把光标移動到變量、函數名稱上,然後敲回車,就會自動在正常編輯區域中定位到指定内容了,很友善的。

常用的幾項.vimrc設定:

“禁止自動改變目前Vim視窗的大小

let Tlist_Inc_Winwidth=0

“把方法清單放在螢幕的右側

let Tlist_Use_Right_Window=1

“讓目前不被編輯的檔案的方法清單自動折疊起來, 這樣可以節約一些螢幕空間

let Tlist_File_Fold_Auto_Close=1