在Vim中查找特定类型的标记

时间:2011-10-28 17:28:21

标签: vim ctags

所以这是我的问题。我已经和Vim一起工作了很多,而且大部分时间都很棒。但是,每当我尝试搜索名称与某个变量名称相同的函数时,仍然让我烦恼的一件事。我有时会在第一次尝试时获得正确的标签,有时不会。然后在我用:tselect提取备用标签列表后,它会为函数定义或变量定义/赋值提供一个标签列表。 (我使用PHP,因此定义和赋值在语法上无法区分)。

但是,我注意到有一个标记为'kind'的列,其值分别为'f'或'v',分别用于函数和变量。我似乎无法找到关于这个领域的大量信息,似乎它可能没有完全标准化或广泛使用。我的问题是:你可以通过“kind”来过滤Vim中的标签结果吗?

理想情况下,默认情况下是搜索整个标记文件,但通过指定一些额外标记,您只能搜索特定的('f'或'v')类型。

对我来说这是一个小问题,因为它经常没有出现,但有时这是一个真正让你烦恼的小问题。

3 个答案:

答案 0 :(得分:5)

您当然可以使用所需的任何php类型组合生成ctag文件(请参阅命令ctags --list-kinds的输出。)

如果您觉得值得付出努力,可以制作一个vim函数tagkind并将其绑定到命令。 tagkind函数可以覆盖当前的tags vim变量,只指向您感兴趣的类型的标记文件,并调用:tag.可选地,它可以存储以前版本的tags变量并在此一次调用后恢复。

不幸的是,除此之外我还不知道。也许别人会知道。

答案 1 :(得分:5)

我使用--python-kinds=-i生成python ctags以排除import语句的标记(这是无用的)。也许您可以使用--php-kinds=-v生成并完全删除一类标记。

您可以阅读:help tag-priority。显然,“最高优先级”标签是根据一些硬编码逻辑选择的。

答案 2 :(得分: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'))], {})

请注意,根据我对该问题的评论,tagfinder.vim上的博客文章中有一个潜在的Vim Vim and Ctags: Finding Tag Definitions插件。但我还没试过。