2012-04-12 8 views
16

上のRuby用のEmacsタグファイルを生成します。 )いくつかのタグが正常に動作しているが、他のタグの多くと私のようなエラーが出る:は、私は次のコマンドを実行して、私のRuby on RailsのプロジェクトのためのEmacs用のタグファイルを生成していますRailsのプロジェクト

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のプロジェクトのためのタグを生成しているの?これまでにこの問題を見たことがありますか?

これは私のEmacsのバージョンctags --version

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

の出力である:それは、関連するかもしれないようにこれはそう

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

「/ Users/simao/Documents/sp/ofe/lib/geo_db.rb'」のクラスツール:: FilteringStepsはどうですか? – phils

+0

いいえ、そうではありません... – simao

+0

etagsはあなたのプロジェクトを間違って索引付けしていると言いますが、TAGSファイルはクラス/メソッドが実際にどこにあるのか異なるファイルにあると思いますか? (どこに*実際に生きていますか?) – phils

答えて

0

特にこのバグを示唆し、第2のリンクにコメントをメモは、Emacsの24を実行していないと仮定すると、Emacsの22

から存在しており、それはあなたが(etags.elし、そのパッチを適用する必要がありますように聞こえますバイト再コンパイル)。

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

+0

私は '2012-04-02'のGNU Emacs 24.0.95.1(x86_64-apple-darwin、NS apple-appkit-1038.36)を使用していますが、まだこの問題があります。 – simao

+0

ああ、私はアイデアが不足しています。 Emacsのバージョンを質問に追加するべきです。他の人にとって参考になる場合は、この回答を残しておきます。がんばろう。 – phils

+0

よろしくお願いします – simao

0

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

0

あなたはGitリポジトリを使用している場合、私はあなたがGitの操作を実行すると、あなたのタグファイルを構築楽ctagsのからautoにこの設定に従うことをお勧めします:

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

あなたは、Gitリポジトリも使用していない場合でも、 ctagsの構築のための彼のコマンドを実行してくださいすることができる。また

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

、私のような、あなたの宝石があなたのプロジェクトのサブディレクトリにバンドルされますので、バンドルの別名は、パスを指定するためにインストールし、あなたにセットアップをお勧めします:

alias bi='bundle install --path vendor' 

(注:そのディレクトリを必ず削除してください)。これにより、各宝石のソースに直接ジャンプして、システム内のすべての宝石でタグファイルが膨大にならないようにすることができます。

7

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

最初にを使用しないを気にするのはなぜですか? Ctagsはすばらしいプロジェクトであり、多くの(50のような)言語をサポートしています。しかし、Rubyのサポートは非​​常に弱く、パーサーは良好な状態ではなく、4年前には変更されていません。 - モジュールA :: B

  • CTAGSは、==のようなオペレータ法(の少なくとも一部)
  • CTAGSは修飾タグをサポートしていないタグない:CTAGSに対処しない

    • type = +
    • Ctagsは定数や属性のタグを出力しません。

    残念ながら、Rubyのctagsジェネレータは古くなっています(Ruby 1.9以降のサポートなし)。または非常に遅いです。しかし、解決策があります!それはリッパータグと呼ばれます。 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 
    

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

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

  • 6

    ここでは2016です。この時点でetagsはうまくいくようです。おそらくCtagsも。

    タグを管理するために作成したレーキタスクは次のとおりです。 lib/tasks/etags.rakeとして保存してから、rake etags createを定期的に実行してください。 viを使用する場合は、etagsをctagsに置き換えてください。

    def project_root 
        gemfile_path = ENV['BUNDLE_GEMFILE'] 
        if !gemfile_path || gemfile_path.empty? 
        then fail "can't find the root of your project from $BUNDLE_GEMFILE" 
        else File.dirname gemfile_path 
        end 
    end 
    
    namespace :etags do 
        desc "generate tags for emacs code hypertext linking aka metadot" 
        task create: :environment do 
        system "find #{project_root}/app/ -iname \\*.rb -print0 | xargs -0 etags" 
        end 
    
        desc "remove tags for emacs code hypertext linking aka metadot" 
        task clean: :environment do 
        system "rm #{project_root}/TAGS" 
        end 
    end 
    
    関連する問題