2011-10-28 37 views
4

因此,這是我的問題。我已經和Vim一起使用了繁瑣的ctags,並且它在大多數情況下都很棒。有一件事仍然讓我感到厭煩,那就是每當我嘗試搜索一個與某個變量名稱相同的函數時。我有時在第一次嘗試時得到正確的標籤,有時不會。之後我用:tselect拉出備用標籤列表,它爲函數定義或變量定義/賦值提供了一大堆標籤。 (我在PHP中,因此定義和分配在語法上難以區分)。在Vim中查找特定類型的標籤

但是,我注意到有一個標記爲'kind'的列分別爲函數和變量賦值'f'或'v'。我似乎無法找到關於該領域的大量信息,看起來似乎可能沒有完全標準化或廣泛使用。我的問題是:你可以通過「kind」過濾Vim中的標籤結果嗎?

理想情況下,默認情況下搜索整個標籤文件,但通過指定一些額外的標誌,您只能搜索特定的('f'或'v')種類。

對我來說,這是一個小問題,因爲它經常不會出現,但有時候是小問題,真的讓你煩惱。

+0

此博客文章看起來很有希望沿着你(和我)之後的行:http://andrewradev.com/2011/10/15/vim-and-ctags-finding-tag-definitions/ – icc97

+0

即使你可以生成一個標籤文件,其中有足夠的信息來區分所有的事情,這只是一場戰鬥,而沒有人似乎專注於另一半。另一半是Vim考慮您正在查找標籤的上下文,並自動僅根據上下文搜索特定類型的標籤。據我所知,Vim在這方面不會自動做任何事情,我從來沒有見過任何人試圖配置Vim以這種方式工作。 –

回答

4

您當然可以生成你想要的PHP種的任意組合反恐怖主義行動小組的文件(見命令ctags --list-kinds的輸出中。)

如果你覺得這是值得的,你可以做一個VIM功能tagkind和綁定它以一個命令。 tagkind函數可以覆蓋當前的tags vim變量以僅指向您感興趣的標記文件,並調用:tag.(可選)它可以存儲以前版本的tags變量,並在此一次調用後恢復它。

不幸的是,除此之外我還不知道。也許別人會知道。

+1

有趣的想法 - 爲我工作。如果有人關心,我會在https://gist.github.com/1349053上提供'.vimrc'代碼片段。我對vimscript不是很擅長,但對我來說似乎足夠好。 – Jonathan

5

我使用--python-kinds=-i生成python ctags來排除導入語句的標籤(這是無用的)。也許你可以用--php-kinds=-v生成並完全刪除一類標籤。您可以閱讀:help tag-priority。顯然,「最高優先級」標籤是根據一些硬編碼邏輯來選擇的。

0

fzf與fzf.vim有一個:Tags(對於整個項目)和:BTags爲當前生成ctags的文件選項。

在插件'Skip tag kinds in :BTags and :Tags'上引發的問題給出了以下代碼,您可以使用以下代碼僅生成特定種類的標籤。我修改了下面的內容,以便它只應該搜索PHP f類型。

command! BTagsEnhanced 
     \ call fzf#vim#buffer_tags(<q-args>, [ 
     \ printf('ctags -f - --sort=no --php-kinds=f --excmd=number --language-force=%s %s', &filetype, expand('%:S'))], {}) 

注意按照我對這個問題的評論,還有通過對Vim and Ctags: Finding Tag Definitions博客中潛在的Vim tagfinder.vim插件。但我沒有嘗試過。