3

我有一个使用 Vim 的 Ctags 设置。
我目前的设置如下:

set tags=./tags;/
set tags+=~/.ctags/*/tags

它基本上在当前目录中查找一个tags文件,直到/,并且还查找tags内部~/.ctags目录,我在其中tags对不同目录中的不同项目进行了排序。

现在,一切正常,除了以下情况: - 我有两个标记文件定义为:~/.ctags/ruby/tags~/.ctags/php/tags - 我在一个 PHP 项目中工作并将CTRL+]我带到一个 Ruby 项目的标记(由于上面定义的第二条规则) - 当我期望它在内部搜索相关标签~/.ctags/php/tags- 它反而在内部找到匹配~/.ctags/ruby/tags- 因此,行为。

那么,我是否可以要求 Vim 只~/.ctags/php/tags在我使用 PHP 时查看内部​​,仅~/.ctags/ruby/tags在我使用 ruby​​ 时查看,让我说~/.ctags/xxxx/tags当我使用xxxx

问候

4

2 回答 2

6

我在我的.vimrc文件中完成它的方式是设置一个局部tags变量:

augroup TagFileType
    autocmd!
    autocmd FileType * setl tags<
    autocmd FileType * exe 'setl tags+=~/.ctags/' . &filetype . '/tags'
augroup END

这是做什么的:每当您打开一个文件时,它会将全局tags变量的当前内容复制到局部tags变量,并添加~/.ctags/[filetype]/tags到它。这意味着只会在 php 缓冲区~/.ctags/php/tags中搜索,而在 ruby​​ 缓冲区~/.ctags/ruby/tags中。如果您有任何要在所有缓冲区中搜索的标签,您可以将全局tags变量设置为指向这些标签,它们将被加载到所有缓冲区中。

于 2012-10-16T20:08:11.137 回答
2

Daan 的解决方案看起来不错。

您可能想看看自动生成标签的easytags插件。它可以选择基于文件类型。

于 2012-10-16T21:08:38.100 回答