Exetrant Ctags与Ruby不兼容,你可以看到ruby.c代码中有很多hacks,基本上它无法识别很多情况.其中最重要的是这一点:
class SomeModule::SomeClass
end
Run Code Online (Sandbox Code Playgroud)
Ctags生成:
SomeModule someclass.rb /^class SomeModule::SomeClass$/;" c
Run Code Online (Sandbox Code Playgroud)
这是错的.正确和预期的条目是:
SomeClass someclass.rb /^class SomeModule::SomeClass$/;" c
Run Code Online (Sandbox Code Playgroud)
这是非常有限的.有一些可用的ctags补丁不起作用,例如https://github.com/xtao/overlay/blob/master/dev-util/ctags/files/ctags-5.5.4-ruby-classes.patch但是看起来在ctags ruby代码库上,这确实需要完全重写.
所以我一直在玩其他选项,这是https://github.com/rdoc/rdoc-tags哪个更好,但速度很慢.我的意思是真的很慢.使用ctags在我的项目上生成标记为2秒,但使用此工具生成标记为1小时.真.
我找到了一个旧项目,它自己解析Ruby并生成标签,但它只适用于Ruby 1.8.它比ctags慢,但并不那么糟糕.
所以我正在寻找一些替代方案.你知道任何其他工作的ruby ctags发生器,它给你正确的输出,并且很快?
谢谢!
编辑:我发现非常好的项目适用于Ruby 1.9+并且准确,快速.我推荐它:
Jay*_*ram 17
充满活力的ctags开箱即用并没有做很多有用的事情:
它不涉及:
module A::B
Run Code Online (Sandbox Code Playgroud)它没有标记(至少某些)"运算符"方法 ‘==’
它不支持合格的标签, —type=+
它不输出常量或属性的标记.
补丁可用,但它仅适用于5.5版本,不再起作用.
其他的项目:
lza*_*zap 17
Ripper-tags努力确实解决了这里描述的一切.它基于官方的Ruby解析器,也很快.https://github.com/tmm1/ripper-tags
gem install ripper-tags
cd your_project/
ripper-tags -R
Run Code Online (Sandbox Code Playgroud)
它也支持Emacs.
在〜/ .ctags中添加以下内容
--regex-ruby=/(^|;)[ \t]*(class|module)[ \t]+([A-Z][[:alnum:]_]+(::[A-Z][[:alnum:]_]+)+)/\3/c,class,constant/
Run Code Online (Sandbox Code Playgroud)
所以你可以:
module A::B
在此处查看更多信息:https://github.com/bltavares/dot-files/blob/master/ctags