emacsサポートはプロジェクト全体の関数宣言に移動できますか?


12

emacsには、別のファイルで定義されていても、ユーザーが関数宣言にアクセスできる関数またはライブラリがありますか?

もしそうなら、どの言語がサポートされていますか?

この質問のインスピレーションは、emacsがIDEと競合できない理由のいくつかを説明する以下の記事から来ています。

http://henrikwarne.com/2012/06/17/programmer-productivity-emacs-versus-intellij-idea/


emacsがこれを一般的に処理する方法は、外部のコンパイルされたプログラム(clangなど)に依存してソースコードをすばやく理解し、コマンドライン経由で渡されたクエリに応答することです。irony-clangこの目的を確認してください。記事に関するコメントを読みましたか?
ショーンオールレッド

1
alchemist.elが提供するエリキシル、またはomnisharpがC#に提供する機能は、どちらもナビゲーション/リファクタリング/アイデアのようなものを外部プログラムに依存しており、ほとんどのIDEによく似ています。(少なくともほとんどのユースケースでは)。EmacsはIDEと同じビジネスではないので、競合する可能性は決してないと言うのは合理的ではないと思います。
レナンラネリ

@RenanRanelli IDEも同じ方法です。ただし、誰かが既にそれを行って「IDE」と呼んだのではなく、手動で統合する必要があります。
Tu Do

私の意見では、2019年に検討すべきソリューションは1つだけです。そして、それは会社の完成を伴うrtagsです。etagsまたは肥大化した不安定なCEDETを忘れてください。rtagsは、コンパイル時情報を使用して、プロジェクトが使用しているもののLIVE構造を提供します。global他はひどいです-彼らは多くの推測作業をして、しばしばあなたを間違った場所に連れて行く栄光に満ちた「ブドウ」です。 github.com/Andersbakken/rtags
RichieHH

回答:


14

Linuxカーネルソースツリー(36k以上)のプロジェクト全体の定義/参照に瞬時にジャンプできます。詳細については、C / C ++ガイドを参照してください。C / C ++の場合、C、C ++、Yacc、Java、PHP4、およびアセンブリをサポートするGNUグローバルを使用することをお勧めします

重要なのは、ある言語のIDE機能が必要な場合は、その言語のプラグインをインストールする必要があるということです。以下は、私が知っている動的言語のパッケージです。

  • ライブWeb開発: skewer-mode
  • Javascriptを:アジサシ。ただし、その前に、js2-modeを忘れずにインストールしてください。何js2-modeについては、説明を参照してください。本質的にjs2-modeは、適切なIDE機能を実行するためにASTを生成する完全なJavaScriptパーサーです。インストールする場合skewer-mode、あなたが持っているだろうよりもjs2-modeあるため、デフォルトではskewer-modeそれに依存します。
  • Python: elpyIDE機能を参照
  • Ruby:ローブには次の機能があります。
  • メソッド定義にジャンプ
  • スーパーまたはポイントで呼び出されたコンストラクターにジャンプします
  • モジュールまたはクラスにジャンプします(少なくとも1つのメソッドが定義されている場合)
  • メソッド文書の表示
  • ElDocを使用してポイントで呼び出されたメソッドに関する情報を表示する
  • メソッドと定数名の補完

またctags、シェルスクリプトやTclなどの非常に多くの言語をサポートするために使用できます。


javascriptのスイート提案はありますか?
-user2522280

@BarryGありアジサシj2-mode私は私の答えで編集。
火ド

2
anacondaPythonでの定義ジャンプのより具体的なソリューションになる可能性があることを指摘したいと思います。
PythonNut

@TuDoローブの機能リストをESSに追加しました。
ドミトリー

C ++には、rtagsycmdもあります。ycmdを使用します。これは、たとえばPython、C#、Go、およびその他の言語でも動作します。私が使用ダムジャンプ弁護士-RGをフォールバックとして、または使用方法を表示したり、コメント/ docには、シンボルの言及します。
アンハンマー

17

emacsで同様の問題に遭遇したため、Dumb Jumpを作成しました。受け入れられた回答に記載されている解決策の多くを試しましたが、次の問題の1つ以上に常に遭遇しました。

  • ソリューションは単一のプログラミング言語でのみ機能しました
  • ソリューションにはインデックス(TAG)ファイルまたは永続的なプロセスが必要

「うまくいった」ソリューションを望んでいましたが、カスタマイズやセットアップは必要ありませんでした。つまり、ランダムなレポジトリをGithubで複製し、他のプロジェクトと同じようにナビゲートしたかったのです。

現在、Dumb Jumpの基本的なサポートは次のとおりです。

  • JavaScript
  • Emacs Lisp
  • Python
  • 行く
  • PHP
  • ルビー
  • ファウスト
  • R
  • ルア
  • さび
  • ...もっと

それはだMELPAを介して利用可能とGitHubの問題とPRSは歓迎以上です。


4

emacsでのこれに対する主な解決策は、TAGSファイルを使用することです。このファイルは、etagsやgtagsなどのプログラムによって作成されます。私自身は、熱心なctagsとetags-select.elを使用(および推奨)して、検索シンボルが複数の宛先にある場合に宛先を絞り込むのに役立ちます。サポートされる言語は非常に多く、個々のツールのマニュアルを参照してください。独自の言語の追加もサポートされているため、関心のあるタグを分離する方法をctagsに指示する正規表現を提供できます。


1
ああ!tagsfilesを忘れることができますか?ctags -e -R *ルートディレクトリからそれを設定します。
ショーンオールレッド

プロジェクトに多くの依存関係がある場合(最近のjavascript web devプロジェクトなど)、これは受け入れられるソリューションですか?
ルドルフオラー

依存関係の数自体は障害ではありません。多くの異なるライブラリを集約する1つの大きなタグファイルを使用できます。私はこれを長年行ってきましたが、ctagsコマンドの呼び出しは簡単にこれを行います。または、私が今お勧めするのは、依存関係ごとに個別のタグファイルを用意することです。emacsは、複数のタグファイルをロードできるほどスマートです。これを簡単にするには、プロジェクトごとにタグファイルのグループを読み込むのに役立つetags-table.elを検索します。
InHarmsWay
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.