【问题标题】:Generating emacs tags file for a Ruby on Rails project为 Ruby on Rails 项目生成 emacs 标签文件
【发布时间】:2012-04-12 09:16:47
【问题描述】:

我正在使用以下命令为我的 Ruby on Rails 项目的 emacs 生成标签文件:

ctags -f TAGS --extra=-f --languages=-javascript --exclude=.git --exclude=log -e -R . $(rvm gemdir)/gems/

当我尝试查找标签(使用 M-.)时,一些标签可以正常工作,但对于很多其他标签,我会收到如下错误:

tag-find-file-of-tag-noselect: File /Users/simao/Documents/sp/ofe/° ¡ not found

etags-goto-tag-location: Rerun etags: `^class Tools::FilteringSteps' not found in /Users/simao/Documents/sp/ofe/lib/geo_db.rb

您如何使用 emacs 为您的 RoR 项目生成标签?你以前见过这个问题吗?

这是ctags --version的输出

Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
Compiled: Mar  9 2012, 15:47:35
Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
Optional compiled features: +wildcards, +regex

我的emacs版本:

GNU Emacs 24.0.95.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2012-04-02

【问题讨论】:

  • 为了清楚起见, ^class Tools::FilteringSteps in /Users/simao/Documents/sp/ofe/lib/geo_db.rb ?
  • 所以您是说 etags 错误地索引了您的项目,并且 TAGS 文件认为该类/方法位于与其实际所在位置不同的文件中? (它在哪里它实际上生活在哪里?)
  • 是的,它认为它在不同的文件上,并且还在文件名中引入了奇怪的字符
  • 你运行的是哪个版本的 ctags?
  • 我用ctags --version 更新了我的答案。谢谢

标签: ruby-on-rails ruby emacs rvm ctags


【解决方案1】:

是的,是的,是的。 ;-)

你为什么会关心不使用 ctags? Ctags 是一个很棒的项目,它确实支持许多(如 50 种)语言。但是对Ruby的支持很弱,解析器状态不好,4年没换过。

  • Ctags 不处理:模块 A::B
  • Ctags 不标记(至少部分)运算符方法,例如 ==
  • Ctags 不支持限定标签,-type=+
  • Ctags 不输出常量或属性的标签。

不幸的是,所有其他(我发现 2 个)Ruby ctags 生成器要么已经过时(不支持 Ruby 1.9+),要么非常慢。但是有一个解决方案!它被称为 ripper-tagshttps://github.com/tmm1/ripper-tags

gem install ripper-tags
cd your_project/
ripper-tags -R # for vim
ripper-tags -R -f TAGS # for emacs

该项目利用称为 Ripper 的内置 Ruby 解析器 API。它速度很快,并且按预期工作。它几乎和 ctags 一样快,但给出了最准确的结果。警告:它不支持 Ruby 1.8。

如果您喜欢 ripper-tags 并且希望在安装 gem 时自动生成所有标签,您可以查看我的 gem-ripper-tags 。不幸的是,它目前不支持 Emacs(已接受补丁 - 很容易做到)。更多信息请访问:https://github.com/lzap/gem-ripper-tags

【讨论】:

    【解决方案2】:

    这似乎是相关的:

    特别注意第二个链接中的注释,表明这个错误自 Emacs 22 以来就存在。

    假设您没有运行 Emacs 24,听起来您应该将该补丁应用到 etags.el(和字节重新编译)。

    (如果您使用的是包含此错误的 Emacs 24 版本,您显然应该更新到最新的预测试版本。)

    【讨论】:

    • 我正在使用GNU Emacs 24.0.95.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2012-04-02,但我仍然有这个问题。
    • 啊,那我没主意了。您应该将您的 Emacs 版本添加到问题中。我会留下这个答案,以防它对其他人有帮助。祝你好运。
    【解决方案3】:

    我使用rtags。对我来说,Ruby 比ctags 更有效。

    【讨论】:

      【解决方案4】:

      如果您使用 Git,我建议您在执行 git 操作时按照 Effortless CTags 中的此设置自动构建您的标签文件:

      http://tbaggery.com/2011/08/08/effortless-ctags-with-git.html

      即使你不使用 Git,你也可以尝试他的命令来构建 CTag:

      ctags --tag-relative -Rf.git/tags.$$ --exclude=.git --languages=-javascript,sql
      

      另外,我建议您为 bundle install 设置一个别名来指定一个路径,以便您的 gem 被捆绑到项目的子目录中,例如:

      alias bi='bundle install --path vendor'
      

      (注意:一定要 .gitignore 那个目录)。这将允许您直接跳转到每个 gem 的源代码,并防止您的标记文件被系统中的所有 gem 臃肿。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多