为Ruby on Rails项目生成emacs标记文件

sim*_*mao 17 ruby emacs ruby-on-rails ctags rvm

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

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

当我试图找到标签(使用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
Run Code Online (Sandbox Code Playgroud)

你是如何使用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
Run Code Online (Sandbox Code Playgroud)

我的emacs版本:

GNU Emacs 24.0.95.1 (x86_64-apple-darwin, NS apple-appkit-1038.36) of 2012-04-02
Run Code Online (Sandbox Code Playgroud)

lza*_*zap 7

耶耶耶.;-)

你为什么要关心不首先使用ctags?Ctags是一个很棒的项目,它确实支持许多(如50种)语言.但Ruby支持非常弱,解析器状况不佳,而且4年后它还没有被改变.

  • Ctags不涉及:模块A :: B
  • Ctags不标记(至少某些)运算符方法,如==
  • Ctags不支持限定标签,-type = +
  • Ctags不输出常量或属性的标记.

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

gem install ripper-tags
cd your_project/
ripper-tags -R # for vim
ripper-tags -R -f TAGS # for emacs
Run Code Online (Sandbox Code Playgroud)

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

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


phi*_*ils 0

这看起来可能是相关的:

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

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

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