emacsでコード補完を取得する方法は?


20

emacsはコード補完をサポートしていることを知っています。しかし正直なところ、少なくとも私がまったく初めてのことに関しては、私は良いFAQリーダーではありませんでした。だから、私は何をダウンロードする必要があり、emacsがC ++とJavaで私のためにスマートなコード補完を行うことができるようにする方法を疑問に思います。または、多くの主要言語のコード補完を行うパッケージはありますか?

回答:


27

emacsのあらゆる種類のバッファーで機能する基本的な方法は、ヒット(別名+ )によって使用される動的な略語です。M-/alt/

これにより、テキストが展開され、現在のバッファーまたは現在開いている他のバッファーに既に存在する他の文字列が複製されます。

C ++またはJava(またはその他)に固有の言語である、より広範なコード補完については、コードテンプレートまたはスニペットパッケージをご覧ください。StackOverflowのこの関連する質問には、いくつかの議論があります。これらの議論でよく言及されるのはyasnippetです。emacs ブログのこの投稿にはスクリーンキャストデモがあります。


+1。また、標準ライブラリcomplete.elを試してみることもできます。これは非常に古く、ほとんど知られていませんが、それが提供するバッファ内補完の種類は有用です。M-x find-library complete、ファイル内のコメントを読みます。
ドリュー

21

@Dougの答えは少し時代遅れであり、彼の焦点は事前定義されたスニペットを使用したコード拡張にあります。

OPの質問は、インテリセンス(たとえば、クラスの自動完全メソッド名)に関するものだと思います。

  1. 以前はヒッピーエキスパンドが一般的でしたが、構文アナライザーはemacs tagsです。したがって、ctagsがサポートするすべての言語をサポートします(C ++、Javaを含む)。しかし、ctagsはコードの分析に正規表現のみを使用するため、結果は完全ではありません。詳細については、私のinit-hippie-expand.elをご覧ください。あなたはの値をチェックすることから始めることができますhippie-expand-try-functions-list

  2. オートコンプリートは、洗練されたUI(ドロップダウンメニュー、コンソールウィンドウでも)を備えた最新のオートコンプリートです。clangをバックエンドとして使用する場合。インテリセンスははるかに優れています。clangを機能させるには、オートコンプリートのプラグインであるauto-complete-clangをインストールする必要があります。clangがサポートする言語(C / C ++ / Obj-C)のみをサポートします。以下のようシルヴァン・ベナーは指摘し、あなたが使用することができるのemacs-eclimを実際に日食の実行可能ファイルを呼び出すJavaの構文解析のバックエンドとして。そのため、オートコンプリートはjavaをサポートできます。詳細については、私のinit-auto-complete.elを参照てください。

  3. セマンティックは、UIとバックエンド解析エンジンの両方を提供します。遅いです。ドロップダウンUIは問題ありませんが、Xウィンドウが必要です。インテリセンスの結果はctagsよりも優れています。そして、ドキュメントは私にはあまりにもギークです。詳細については、init-semantic.elを参照してください。

  4. company-modeはオートコンプリートに似ていますが、違いはすべてを1つのバンドルにパッケージ化することです。たとえば、C ++開発者は企業モードのインストールのみが必要です(オートコンプリートにはサードパーティのプラグインが必要です)。UIのもう1つの違いは、会社が候補を自動的に表示することです。社内で押すキーが少なくなります。カスタマイズ後のオートコンプリートでも同じことを行うことができます。

要約すると、オートコンプリート、会社は最も人気のある2つの選択肢です。セマンティックおよびヒッピー拡張も歓迎されますが、あまり使用されていません。他の人は言及するのは簡単すぎて、その機能はすでにビッグ4でカバーされています。たとえば、オートコンプリートはyasnippetを入力ソースとして使用できます(オートコンプリートはUIを提供しますが、実際の候補はyasnippetバックエンドによって生成されます)。

私が使用することをお勧めメジャーコード補完プラグインとしてオートコンプリートまたは会社のいずれかをし、セマンティックやヒッピー拡大補完プラグインとしてのいずれか

会社モードとヒッピーエキスパンドを使用しているのは、

  • 現在(2017年)会社モードはオートコンプリートよりも積極的に維持され、サードパーティのプラグイン(ラテックスプラグインなど)が追加されています

  • hippie-expandはあまりアクティブではありませんが、TABcompany-mode / semantic / auto-completeが使用しているキーを占有しません

C ++ / Javaで会社モードを使用している場合は、変更することができますcompany-backends

会社モードに関するいくつかのヒント、

の値を微調整する必要がある場合がありますcompany-backends。たとえば、その値がであるとします(company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords))。次に、company-eclimゼロ以外の候補を取得できるcompany場合は、javaを記述していると考えられるため、後にバックエンドを実行しませんcompany-eclim

見てみましょう(company-dabbrev-code company-gtags company-etags company-keywords)。これら4つのバックエンドはすべて一緒に使用されます。たとえば、company-dabbrev-codeゼロ以外の候補を正常にフェッチした後でも、他の3つのバックエンドが実行されます。

実際には、多くの場合、バックエンドの順序を再調整するか、新しいバックエンドを追加する必要があります(company-rtags、など)。


ラテックス用のEmacs 24で最高の自動補完パッケージはどれですか?
博士号

@doctorateオートコンプリートとそのソースemacswiki.org/emacs/AutoCompleteSourcesを使用する必要があると思いますが、私はラテックスユーザーではなくプログラマなので、GoogleとEmacsコミュニティで多くの学者をダブルチェックすることをお勧めします。
チェンビン14

カンパニーモードはラテックスもサポートしていることに注意してください。オートコンプリートの代わりに会社をお勧めします
陳ビン

2

短い答え:Javaに役立つemacsについては何も知りません。ダイナミックエキスパンドは、クラスパスのライブラリを気にしません。入力しているコードについては何も知りません。バッファの1つに既に存在するテキストにのみエキスパンドできます。JDEとemacs-eclimはこの機能を提供しようとしますが、個人的には感銘を受けませんでした。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.