我正在使用gem-ctags和rbenv-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设置。在项目中打开一个文件。
'tags'
最后由vim-fugitive设置。跳转到宝石中的标签。
'tags'
最后由vim-bundler设置,它只包含工作目录,当前缓冲区的目录和ruby 2.2.0标准库。如何确保找到我正在导航的任何宝石的根目录中的标签文件?
注意:我从Tim Pope的rbenv-sentience中获取灵感,并在每个ruby安装的根目录中添加了一个合适的.ruby-version文件。当我导航到一个宝石时,'tags'
仍然失去了宝石路径,但现在它至少反映了标准库的正确版本。更进一步......
答案 0 :(得分:0)
我想我明白了。部分答案是为每个ruby安装设置一个.ruby-version本地。这确保了无论何时我在该安装的子目录中(例如,在已安装的gem中),它都会查找正确的ruby安装标准库。
然而,主要修复程序似乎是从当前缓冲区或目录向上递归搜索:
set tags-=./tags,tags
set tags+=./tags;~,tags;~
根据this thread,分号语法允许您向上搜索直到指定的"停止"目录(在我的情况下为~
)。
实际上,我可能只需要将此更改应用于当前缓冲区目录(./tags;~
),因为这样可以覆盖99%的用例。
如果它能够识别项目的根目录并且只搜索那么远,那也很好,但我还没有找到实现目标的方法。