18

次のコマンドを使用して、RubyonRailsプロジェクトの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
4

4 に答える 4

8

ええ、ええ、ええ。;-)

そもそも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

このプロジェクトは、Ripper と呼ばれる組み込みの Ruby パーサー API を活用します。高速で、期待どおりに動作します。ctags とほぼ同じ速度ですが、最も正確な結果が得られます。警告: Ruby 1.8 はサポートしていません。

ripper-tags が好きで、gem のインストール時にすべてのタグを自動的に生成したい場合は、それを行う私のgem-ripper-tagsをチェックしてください。残念ながら、現時点では Emacs をサポートしていません (パッチは受け入れられています - とても簡単です)。詳細: https://github.com/lzap/gem-ripper-tags

于 2013-08-12T10:57:00.070 に答える
0

これは関連があるようです:

特に2番目のリンクのコメントに注意してください。これは、このバグがEmacs22以降に存在していることを示唆しています。

Emacs 24を実行していないと仮定すると、そのパッチをetags.elに適用する必要があるようです(およびバイト再コンパイル)。

(このバグを含むバージョンのEmacs 24を使用している場合は、明らかに最新のプレテストリリースに更新する必要があります。)

于 2012-04-13T09:48:26.343 に答える
0

rtagsを使用します。私にとっては、 ctagsよりも Ruby の方がうまく機能しました。

于 2013-04-08T12:14:19.523 に答える
0

Git を使用している場合は、Effortless CTags の次のセットアップに従って、git 操作を実行するときにタグ ファイルを自動ビルドすることをお勧めします。

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

Git を使用していない場合でも、CTag を構築するために彼のコマンドを試すことができる場合があります。

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

また、次のようなプロジェクトのサブディレクトリに gem がバンドルされるように、パスを指定する bundle install のエイリアスを設定することをお勧めします。

alias bi='bundle install --path vendor'

(注: そのディレクトリは .gitignore にしてください)。これにより、各 gem のソースに直接ジャンプすることもでき、タグ ファイルがシステム内のすべての gem で肥大化するのを防ぐことができます。

于 2013-07-25T21:27:55.667 に答える