管理Vim'标签'切换缓冲区时的选项

时间:2015-04-12 01:21:18

标签: ruby vim ctags exuberant-ctags

我正在使用gem-ctagsrbenv-ctags来索引我的宝石和ruby库。

还使用一些影响Vim查找标记文件的插件:

很高兴能够在一个索引良好的代码库中跳转,但我发现Vim的'tags'选项在导航标记堆栈时处理不当。

我将从一个Rails项目开始,发现我可以在任何我想要的地方跳转:在应用程序内,进入ruby标准库(对于与当前项目相关的ruby版本),或者进入gem。所以我跳进了一个宝石,但是Vim再也找不到那个宝石的标签了,所以我不能在它里面做更容易的导航。

例如:我安装了ruby 2.1.0和2.2.0,并将2.2.0设置为全局默认值。

使用ruby 2.1.0的Rails应用程序的根目录中的空缓冲区启动Vim。

  • 执行:verbose set tags?显示'tags'最后由vim-rails设置。
  • 标签在应用程序本身,ruby的标准库(2.1.0)和gem(也是2.1.0)中可用。

在项目中打开一个文件。

  • 现在报告'tags'最后由vim-fugitive设置。
  • 与上述相同的标签。好到目前为止。

跳转到宝石中的标签。

  • 现在'tags'最后由vim-bundler设置,它只包含工作目录,当前缓冲区的目录和ruby 2.2.0标准库。

如何确保找到我正在导航的任何宝石的根目录中的标签文件?

注意:我从Tim Pope的rbenv-sentience中获取灵感,并在每个ruby安装的根目录中添加了一个合适的.ruby-version文件。当我导航到一个宝石时,'tags'仍然失去了宝石路径,但现在它至少反映了标准库的正确版本。更进一步......

1 个答案:

答案 0 :(得分:0)

我想我明白了。部分答案是为每个ruby安装设置一个.ruby-version本地。这确保了无论何时我在该安装的子目录中(例如,在已安装的gem中),它都会查找正确的ruby安装标准库。

然而,主要修复程序似乎是从当前缓冲区或目录向上递归搜索:

set tags-=./tags,tags
set tags+=./tags;~,tags;~

根据this thread,分号语法允许您向上搜索直到指定的"停止"目录(在我的情况下为~)。

实际上,我可能只需要将此更改应用于当前缓冲区目录(./tags;~),因为这样可以覆盖99%的用例。

如果它能够识别项目的根目录并且只搜索那么远,那也很好,但我还没有找到实现目标的方法。