2010-02-22 18 views
5

我已經安裝了vim 7.2和ctags 5.8,並創建了帶有「ctags -R/foopath」的標記文件。試圖去定義Vim中的類/函數

我有許多方法,這些方法在幾類稱爲具有相同的名稱,所以如果我把光標放在一個函數調用與我執行「:標籤」它顯示列出的標籤的第一。如果我執行「:TN」有好幾次我終於找到方法..

所以我的問題是:是否有任何的方式來顯示直接其中的類,它包含正確的方法我打電話路徑?

回答

3

:tselect tagname會給你一個匹配標籤的列表,你可以輸入你想要的標籤的編號。

:stselect tagname將首先拆分窗口。

您也可以將光標置於單詞上並輸入g]以獲取與該單詞匹配的標籤列表。

<CTRL-W>]將拆分窗口並轉到與光標下的單詞相匹配的第一個標籤。

<CTRL-W>g]將拆分窗口並給出匹配列表。

+0

謝謝戴夫,但我想你不理解我,或者我沒有解釋正確。 讓我們看看:假設我已經標記了幾個具有foo()方法的類(class1,class2,class3等)。 如果我有這樣的代碼: $ class3_object = new class3(); class3_object-> foo(); 我想去_directly_對應於class3的標籤,因爲它是對象「class3_object」的類。 Javi – ziiweb 2010-02-23 10:54:40

0

您可以使用taglist()將標記中的原始數據讀入緩衝區。然後,您可以在緩衝區中搜索您感興趣的其他條件,包括類名稱和文件目錄的某些部分。

因此,要對「mytag」嘗試更精確的搜索:

:new | put =taglist(\"^mytag$\") 

爲了獲得最多的信息,一定要使用Exuberant Ctags

你搜索你想要的數據後,你會看到與「文件名」爲前綴的標籤相關的文件名稱:「加利福尼亞」打頭的一行文字:

把它在一個函數與一些代碼來美化和妥善處理緩衝區:

" List information about matching tags in a buffer 
function! BrowseTags(tagStr) 
    new [Tag Brower] 
    setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap 

    put =taglist(a:tagStr) 

    " Beautify it a little 
    normal 1G 
    while search('^{', 'W') 
    call setline(".", split(getline("."), "\\(\\(}$\\)\\|\\('\\w\\+':\\)\\)\\@=")) 
    endw 
    normal 1G 
endfunc 

您可以使用呼叫BrowseTags(「^ myTag $」)運行功能的精確匹配myTag,或者使用一些正則表達式來獲得相似的匹配。

雖然我從來沒有打擾過這麼做,但是編寫各種命令並不難,不用打開緩衝區即可自動執行最常見的任務。