0

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

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

能够在索引良好的代码库中跳转真是太好了,但我发现'tags'当我浏览标签堆栈时,Vim 的选项处理不当。

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

例如:我安装了 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) 和 gems (也是 2.1.0) 中可用。

在项目中打开一个文件。

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

跳转到 gem 中的标签。

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

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

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

4

1 回答 1

0

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

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

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

根据这个线程,分号语法允许您向上搜索直到指定的“停止”目录(在我的情况下~)。

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

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

于 2015-04-12T03:36:54.523 回答