2009-06-28 27 views

回答

54

我認爲最簡單的方法是使用「g ctrl-」而不是「ctrl-」「。如果只有一場比賽,它會把你帶到那裏。如果有多個匹配項,它會將它們全部列出,讓你選擇你想要的,就像:tselect。兩全其美的。:)

+0

看起來很有希望,我會檢查一下 - 謝謝。 – 2009-11-17 22:10:56

+0

對我來說,這只是給了我兩個前向聲明(在不同的文件中)共享名稱的函數。 但它沒有顯示函數的實現。 – frankster 2010-02-18 11:59:58

8

您應該可以使用tntp跳轉到各種匹配標籤。

  • ^]帶你到第一場比賽。
  • 如果這不符合您的要求,請輸入:tn轉到下一個。
  • 如果您輸入:tn的次數太多,您可以輸入:tp返回上一個。
1
:tselect my_little_function 

,你會得到一個匹配列表。 或者如果你跳轉到一個標籤,你不喜歡它,然後鍵入

:tselect 

,你會得到最後的有源標籤替代的列表。

8

我相信Vim默認會轉到標籤文件中的第一個標籤。如果您願意,可以選擇另一個:使用:tj(類似於:tselect,但如果只有一個匹配則自動跳轉)或Ctrl-]後跟:tn)。

更改默認值的唯一方法是更改​​標記文件的順序,但我不相信ctags提供了一個命令行選項來執行此操作。

這並不像聽起來那麼難,因爲您基本上需要一個腳本來打開標籤文件,通過'kind'標籤對它進行排序並將其重新寫回。標籤中的'kind'是一個描述它是函數(f),函數原型(p),宏,枚舉名等等等的單個字符。如果您使用的是Linux,它可能在理論上爲,是那樣簡單:

#!/bin/sh 
ctags -R -f - . | tac > tags 

由於tac反轉文件中的行的順序,這將自動先將定義。然而,由於標題需要維護,Vim更加複雜,因此Vim更喜歡標籤文件進行排序,所以最好通過文件並按照順序對第一個條目(標籤名稱)進行排序,然後相反的順序。因此,更復雜的東西可能會更好。

我爲無恥的插件道歉,但我寫了一個Vim插件(間接)做你需要的。它旨在爲函數名,宏,枚舉等類似的東西添加許多額外的高亮顯示組。然而,這樣做的其他事情之一是對標記文件進行重新排序,以便函數實現在函數聲明之前出現,從而實現你想要的(我有和你一樣的需求)。如果你不想要任何突出顯示功能,你可以很容易地將其全部刪除:這是一個相當簡單的Python程序和更簡單的Vim腳本,可從my site獲得。

1

此選項爲我工作更好

在.vimrc里加上以下行,現在你可以使用(在文件上variable/entry)鼠標雙擊跳轉到標記的位置。如果找到單個匹配,它將立即跳轉。如果有多個條目匹配,它會提示用戶輸入..

:map <2-LeftMouse> g< c-]> 
1

以下內容添加到您的.vimrc文件:

noremap <c-]> 2<c-]> 

此行會使Vim自動跳轉到第二場比賽(而不是第一個),通常是函數定義。

1

遲到了,但傳入VIM標記的Google:

我發現,除了使用的ctags cscope將是去,至少在C/C方式++。它對呼叫樹更聰明,如果失敗,可以將其設置爲ctags。每次運行ctags -R時只需運行「cscope -b」。你會準備好去的。如果你使用下面的設置,你可以像往常一樣使用Ctrl - ]/Ctrl-T,但你也可以添加漂亮的新跳轉,如跳轉到函數聲明並顯示函數調用者的跳轉列表。

" setup 
if has("cscope") 
    set csto=0                    
    set cst 
    set nocsverb 
    " add any database in current directory 
    if filereadable("cscope.out") 
    cs add cscope.out 
    " else add database pointed to by environment 
    elseif $CSCOPE_DB != "" 
    cs add $CSCOPE_DB 
    endif 
    set csverb 
endif 

" jump to a function declaration 
nmap <silent> <C-\> :cs find s <C-R>=expand("<cword>")<CR><CR>1<CR><CR> 
" show a list of where function is called 
nmap <silent> <C-_> :cs find c <C-R>=expand("<cword>")<CR><CR> 
0

有幾種方法可以使Vim跳轉到一個標籤直接,如果只有一個標籤匹配,否則存在標籤匹配的列表。

您可以使用'tjump'ex命令。例如,命令':tjump func1'將跳轉到定義func1,如果它只定義一次。如果func1被多次定義,將會出現一個匹配標籤列表。

您可以將光標放在標籤上並按g Ctrl-]

您可以在視覺上選擇文本並按g Ctrl-]來跳轉或列出匹配的標籤。

您可以使用'stjump'ex命令。這將在新窗口中打開標籤列表中的匹配或選定標籤。

您可以按Ctrl-W g Ctrl-]做一個:stjump。

Help: :tjump, g_Ctrl-], v_g_CTRL-], :stjump, Ctrl-W_g_Ctrl-] 
0

您可以按然後CTRL +],這將直接進入第二場比賽,在Java中,這通常是一些接口的實現。