回答
我認爲最簡單的方法是使用「g ctrl-」而不是「ctrl-」「。如果只有一場比賽,它會把你帶到那裏。如果有多個匹配項,它會將它們全部列出,讓你選擇你想要的,就像:tselect。兩全其美的。:)
您應該可以使用tn
和tp
跳轉到各種匹配標籤。
- 按
^]
帶你到第一場比賽。 - 如果這不符合您的要求,請輸入
:tn
轉到下一個。 - 如果您輸入
:tn
的次數太多,您可以輸入:tp
返回上一個。
:tselect my_little_function
,你會得到一個匹配列表。 或者如果你跳轉到一個標籤,你不喜歡它,然後鍵入
:tselect
,你會得到最後的有源標籤替代的列表。
我相信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獲得。
此選項爲我工作更好
在.vimrc里加上以下行,現在你可以使用(在文件上variable/entry
)鼠標雙擊跳轉到標記的位置。如果找到單個匹配,它將立即跳轉。如果有多個條目匹配,它會提示用戶輸入..
:map <2-LeftMouse> g< c-]>
以下內容添加到您的.vimrc文件:
noremap <c-]> 2<c-]>
此行會使Vim自動跳轉到第二場比賽(而不是第一個),通常是函數定義。
遲到了,但傳入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>
有幾種方法可以使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-]
您可以按然後CTRL +],這將直接進入第二場比賽,在Java中,這通常是一些接口的實現。
- 1. 在JavaScript Promise聲明中定義變量而不是外部
- 2. 如何在IDE中找到方法定義而不是聲明?
- 3. SVG用類聲明替換填充聲明以進行顏色自定義
- 4. Vim:如何轉到使用ctags的C++方法的聲明
- 5. VIM在.vimrc中設置ctags
- 6. 用ctags在vim中完成
- 7. 是否可以在REPL中定義固定聲明?
- 8. ctags鍵綁定不適用於vim
- 9. vim-go:搜索函數規範而不是聲明
- 10. vim-7 with ctags
- 11. VIM + ctags + omnicppcomplete
- 12. Vim - ctags:找不到標記
- 13. 獲取用於MethodInvocation而不是聲明類的實際類
- 14. 如何在HTML中獲取URL?而不是如何在JavaScript上聲明函數?
- 15. 參數在任務運行時讀取,而不是在聲明時讀取
- 16. 運行批處理文件而不在變量聲明中獲取打印[octave]
- 17. 獲取聲明
- 18. ctags vim - 轉到相同python類中的方法定義
- 19. 獲取定義的行而不是空的結果集:SQL Server
- 20. 不確定在哪裏定義和聲明我的結構。 (獲取未聲明的標識符)
- 21. Vim&ctags:所有項目的常見ctags?
- 22. VIM可變聲明
- 23. 我可以在C++中「前進聲明」?
- 24. 獲取選中聲明
- 25. 聲明VS定義
- 26. 聲明和定義
- 27. 爲什麼我可以在C++/CLI中聲明const結構,而不是在C#中聲明?
- 28. 如何在vim中使用ctags?
- 29. 在Rails/Vim項目中的Ctags
- 30. 獲取類聲明
看起來很有希望,我會檢查一下 - 謝謝。 – 2009-11-17 22:10:56
對我來說,這只是給了我兩個前向聲明(在不同的文件中)共享名稱的函數。 但它沒有顯示函數的實現。 – frankster 2010-02-18 11:59:58