Vim跳转到Ruby类声明

3

我想从以下内容开始:

class ApplicationController < ActionController::Base

to

/home/slavik/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.1.0.rc6/lib/action_controller/base.rb

并查看可能使用该类的注释参考

3个回答

3

是的,至少有一种方法。您可以使用exuberant ctags与Vim的tags选项相结合。实际上,您必须在/home/slavik/.rvm/gems/ruby-1.9.2-p290/gems/中执行ctags:

ctags -R tags

如果您想深入了解标签自定义,请参阅ctags --help。然后,您需要将此文件添加到vim中的标签路径中。使用类似下面这样的内容:
:set tag+=/home/slavik/.rvm/gems/ruby-1.9.2-p290/gems/tags

为了理解vim的这个功能有多强大,请查看使用标签浏览程序

"ctags -Rtags" 出现错误: "ctags: 未知选项:-t" - MhdSyrwan
我尝试了 ctags -R --language-force=ruby --sort=yes 并且它可以工作;为什么我需要传递 -Rtags?这是什么意思? - MhdSyrwan
1
啊,我明白了!空格出了问题。我更新了答案。谢谢你的注意! - lucapette
实际上,参数 tags 被解释为文件名,正如文档中所解释的那样!如果它不存在,则会抛出文件未找到错误。 - MhdSyrwan

2

ctags存在一些问题,其解析器相当陈旧且难看:

  • ctags无法处理:A::B 模块
  • ctags不能标记(至少有的)操作符方法,比如 ==
  • ctags不支持限定标签,-type=+
  • ctags不输出常量或属性的标签。

我建议使用更好的项目ripper-tags,它基于Ruby官方解析器Ripper,这是Ruby自带的解析器。 它快速而准确:https://github.com/tmm1/ripper-tags

您也可以安装gem-ripper-tags,以在gem安装后自动生成标签文件:https://github.com/lzap/gem-ripper-tags

请注意,现在是2013年8月,ripper-tags已进行了大规模重构,这可能会导致命令行选项或gem-ripper-tags接口发生变化。 如果出现问题,请在几天内更新两个gem并阅读帮助屏幕以了解新选项。


1

ripper-tags听起来不错,但是今天(2013年11月)出现了一些问题。最终我使用了exuberant ctags(加上一些技巧)。

1- 安装exuberant ctags。如果你使用的是osx,这篇文章展示了一个小技巧: http://www.runtime-era.com/2012/05/exuberant-ctags-in-osx-107.html

2- 如果你只想为目录中的文件包含ctags,请在目录中运行此命令:

ctags -R

这将为您创建一个“tags”文件。
3- 如果您希望包含gems的ctags(这对我在RubyMotion和我开发的本地gems上非常有帮助),请执行以下操作:
ctags --exclude=.git --exclude='*.log' -R * `bundle show --paths`

信用:https://coderwall.com/p/lv1qww(请注意,我去掉了生成emacs标签而不是vim的-e选项)

4- 将以下行添加到您的~/.vimrc文件中

set autochdir 
set tags+=./tags;

(为什么需要分号:http://vim.wikia.com/wiki/Single_tags_file_for_a_source_tree)

5- 转到想要跟随的单词,按下ctrl+]。按下ctrl+o返回 (https://dev59.com/anVD5IYBdhLWcg3wNIvc#53929)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接