Emacsをフル機能のC / C ++ IDEとして使用する


50

EmacsをC / C ++ IDEとして使用するために、1年以上試行錯誤を繰り返してきました。私はこれまでわずかな成功しか収めていませんでしたが、途中でいくつかのレンガの壁にぶつかりました。現在、CEDETを使用しようとしていますが、CEDETを効果的に使用する方法を理解するのに苦労しています。

IDEで探している機能は次のとおりです。

  1. ソフトウェア「プロジェクト」の管理。プロジェクト内で検索と置換などの機能を実行できるように、IDEに現在のプロジェクトを構成するすべてのファイルの意味を持たせたい。(ソースツリーに多数のサポートファイルを散らかさずにこれを実現できればいいと思います。プロジェクトごとに複数の集中プロジェクトファイルが必要なのはなぜですか?)
  2. 現在アクセスしているバッファに関係なく、IDE内から現在のプロジェクトをビルドする機能。現在のプロジェクトをビルドするキーをバインドできる必要があります。
  3. エラー報告。ビルドツールによって報告されたエラーを見つけるために、500行以上の出力を読む必要はありません。エラーは、エラーごとに1行で、独自のバッファーに表示されることが望ましいです。
  4. プロジェクト内のシンボルの認識、およびそれらが定義されている場所。プロジェクトファイルにあるか、システムインクルードファイルにあるかに関係なく、シンボル定義にジャンプしたい。
  5. 視覚的なデバッグ。コードをステップ実行すると自動的に更新されるローカル変数のウォッチリストが必要です。コードにブレークポイントを設定して、次に実行されるコード行を確認できるようにします。

これらの各機能は、EDE、Semantic、GDBなどを使用して一度にまたはもう1つ動作させたために存在することを知っています。問題は、これらの機能のすべてを同時に動作させることができなかったことですなぜなら、通常、各ピースはそれ自体で構成する必要があり、通常、それらすべてを一度に構成し、それらを連携させる方法を理解するのは大変な作業です。

Emacsをフル機能のC / C ++ IDEに変えるためのソリューションは何ですか? 常にすべてを個別に設定する必要がありますか、それともすべての機能を一度に設定する方法がありますか?

編集:この質問に対する良い答えは、与えられた5つの基準をすべて正確に満たす必要はありません。IDEを「フル機能」と見なす前に、表示したい機能の種類のより具体的なアイデアを示すために、リストを提供しました。CEDETがこの法案に適合する可能性は十分にありますが、ゼロからセットアップする方法に関する段階的なチュートリアルをまだ見つけていません。


6
この質問はいくつかに分けた方が良いかもしれません。あなたは、部分的な答えの束を持っているかもしれません。そこでは、アイテムのどれも彼らが値する注意を与えられません。
マラバルバ14


6
@Malabarba:5つの個別の質問をしていた場合、重複している可能性があります。この質問の要点は、5つの異なる目標を達成する5つの異なるパッケージがあるかもしれないということですが、5つすべてを互いにうまく動作するように構成することはほとんど不可能に思えます。「Emacsがフル機能のIDEとして機能することはできません。設定に時間がかかりすぎるため、」という答えが返ってきた場合。それでそう。
nispio 14

4
各ポイントはそれ自体の質問(重複する可能性があります)である可能性があり、それらをすべて1つの質問にまとめると、パッケージの相互作用により異なる回答が得られる場合があります。
ジョナサンリーチペピン14

回答:


27

異なる言語には異なるレベルの「IDE-ness」が存在しますが、残念ながら設定なしで完全なIDE機能を取得することはありません(設定が気に入らない場合は、おそらくEmacsを使用しないでください)。CEDETは、サポートされている言語のすべてのニーズをカバーする完全なソリューションを目指していますが、私は個人的にそれが適切に機能することは一度もありません。代わりに、IDEベースをカバーするためにいくつかのパッケージを並行して使用します。私が知っているさまざまな言語のためのいくつかのソリューションを使用して、順番にあなたのポイントを調べます:

  1. 発射物は、実際のIDEのような体験を提供するのに最も近いパッケージです。プロジェクトごとに多数の便利な機能を提供します。また、何らかのウィンドウ/ワークスペース管理も必要になるでしょう。私はwacspaceと呼ばれる独自のソリューションを使用していますが、他の優れたソリューションには、パースペクティブワークグループ、およびエルスクリーンが含まれます。
  2. 言語が異なれば、「ビルド」とは何かについての考え方も異なりますが、M-x compileほとんどすべてに対応でき、エラーのページングが簡単になります(使用するだけですnext-error)。ディレクトリ変数を使用して設定することで、プロジェクトごとに簡単にカスタマイズできますcompile-command。()compileを使用して発射物で実行できます。projectile-compile-projectC-c p c
  3. M-x compileまた、ここで説明しました-通常、エラーは*compilation*バッファ内の行ごとに1つになり、ページングは​​簡単next-errorです。
  4. シンボルにジャンプするには、「コードを理解する」必要があります。これは、言語によってサポートが大きく異なる場所です。elispのためには、優れた使用することができるのelisp-スライム-NAVを、次にM-.定義にジャンプします。他の言語に対して同様のサポートを提供するいくつかのパッケージを以下に示します。CIDER(Clojure用); SLIME(Common Lisp用); ローブ(Ruby用); C / C ++のセマンティックタグまたはclangタグ 他のすべてが失敗した場合、熱狂的なctagsのようものを使用してEmacsのビルトインTAGS機能を使用することもできますが、TAGSで許容できる結果に近いものはありません。
  5. Emacsはデバッガを非常に分散してサポートしています。GDB GUDは、 Cのような言語のための最善の策です。それ以外の場合は、ほぼ完全に言語ごとになります。(言語間の視覚的なデバッグは本当に現実的な目標ではないと思います。)

4
サイドノードprojectileは、プロジェクトの自動切り替えをperspective作成することと直接統合できますperspective-per-project
ジョナサンリーチペピン14

semantic#4 についてメモを追加します。セマンティックは優れたパッケージであり、コードを理解し、その情報を使用して多くの有用なことを実行できます。
ジョーダンビオンド14

私は実際に使用semanticしたことがないので、不完全なC ++サポートがあることを覚えていると思いますが、答えに追加しました。
shosti 14

15

私が使用このガイドを C ++ IDEとしてのEmacsを使い始めるために。多くの質問に答えるのに役立つHelmProjectileを紹介します。機知に

  1. 発射物はプロジェクトを管理します。Makefile、SConstruct、Gitリポジトリ、SVNリポジトリ、およびおそらく他のビルドシステムまたはバージョン管理ファイルをディレクトリツリーで検索し、現在のプロジェクトに関連付けられているファイルを自動的に学習します。例として、C-c p h実行helm-projectileされ、現在のプロジェクト内のファイルを検索しヘルムを使用しています。

  2. Projectileはプロジェクトをビルドできます。C-c p c実行projectile-compile-project可能なファイルに基づいてメイク/ SConsは/ CMakeのを実行しようとします。これを設定する必要はありませんでした。何をすべきかを常に知っています。

  3. エラーは、実行時に独自のバッファーに表示されますprojectile-compile-projectが、希望どおりにきれいかどうかはわかりません。

  4. プログラムhelm-gtagsとインターフェイスするパッケージを使用できますgtags(システムで使用可能になっている必要があります)。gtagsはGNUプロジェクトであるため、Windowsですぐに動作する可能性は低いことに注意してください。

    構成すると、Helmはプロジェクト内のシンボルを認識し、定義に移動して場所を使用できます。たとえばhelm-gtags-dwim、変数または関数の使用にジャンプし、ヘッダーファイルで実行すると、そのヘッダーファイルが開きます。

  5. 私はまだこれを試していません。

リストされているガイドには、開始方法に関する非常に明確な構成情報が記載されています。


私もそのガイドにつまずいて、それを適用しました。私見それはどういうわけか重量であり、あまりにも多くの基本的なemacsの相互作用を変更します。ヘルム関連の多くの構成は、通常のショートカット(バッファーで現在のディレクトリを簡単に開く、またはいくつかのキーストロークでサブサブディレクトリのファイルを開くなど)を妨げるため、無効にしました。ただし、一見の価値がありますが、おそらく全体ではなく、段階的に試してください。
ステファンGourichon

9

現在、フル機能のC / C ++ IDEを求めているので、資格があるかもしれません。

vc4からVisual Studio 2010までのすべてのMS IDEを使用したので、あなたが望むものを完全に理解しています。

幸いなことに、EmacsはVisual Studioと同じ95%の性能を発揮し、さらに多くのことが可能です。しかし、「もっと」の部分には興味がないかもしれません。したがって、私はあなたの質問にのみ焦点を当てます。

ここで重要なのは、CakeアプリケーションがWindows専用であっても、CMakeを使用する必要があることです!物語の終わり。他に選択肢はありません、私は私が話していることを知っています。CMakeを使用しない場合、続行するのは無意味です。

質問1への回答:何も設定する必要はありません。他のプラグインを設定するcpputils-cmake(https://github.com/redguardtoo/cpputils-cmake)をインストールします。Visual Studioよりもさらに便利です。したがって、プロジェクトごとのセットアップは必要ありません。検索を置き換えるために、bash / perl / gitとpercol(https://github.com/mooz/percol)のパワーを組み合わせています。これは、どのIDEよりもはるかに優れています。ブログ(http://blog.binchen.org/categories/emacs.html)と〜/ .bashrc(https://gist.github.com/redguardtoo/01868d7a13817c9845e8#file-bashrc)を確認してください。たとえば、特定のコミットでファイルを検索して置き換えることができます。

質問2への回答:cpputils-cmakeによって既にセットアップされていますM-x compile。通常どおり必要です。

質問3への回答:質問2と同じです。なぜこれが問題なのかわかりません。VSとまったく同じ動作であり、キーバインドが優れています。

質問4への回答:現在、ほとんどの人はcpputils-cmakeと組み合わせることができるGnu Globalを使用しています。本当の問題は、含まれているすべてのC ++ヘッダーを含むディレクトリを自動的に検出することです。それはcpputils-cmakeで行うことができ、他のすべては簡単です。man globalシェルで環境変数GTAGSLIBPATHに関するマニュアルをお読みください。コードナビゲーション用にグローバルに基づいた素敵なUXを提供する多くのプラグインがあります。

質問5への回答:ビジュアルデバッグ、多くの人が推奨しましたM-x gdb-many-window。試してみましたが、うまくいきませんでした。それは、単にgdbのバージョンが古く(ヒント、OSX 10.7.3を使用している)、OSをアップグレードするのが面倒だからです。しかし、GUDは問題ありません。エディターウィンドウで変数を印刷するための短いキーを作成します。すべてのデバッグスタッフが使用可能です。VSのようなテーブルUXレイアウトはありません。しかし、正直に言うと。MicrosoftのデバッガーUXも世界最高ではありません。最高のユーザーフレンドリーなデバッガーはDDD(http://www.gnu.org/software/ddd/)。GudとVSはどちらもこの問題を嫌っています。最近では、別のEmacsプラグインであるyasnippetを使用してロギングコードを挿入しています。明確にするために、ブレークポイントに関する高度なトリックをすべて知っています。これは、これらのトリックを適用するのが面倒だからです。Emacsにロギングコードを挿入する方がはるかに簡単です。

IDEにはもっと多くのことがあります:コード補完?会社モードを使用し、セットアップの必要はありません。リアルタイム構文チェック?cpputils-cmakeを使用してから、(flymake-mode 1)

最も良いのは、(https://github.com/redguardtoo/emacs.d)で私のセットアップを使用する場合、VSよりも少ないセットアップを行う必要がありますそのセットアップのタイトルは「purcell's emacs configuration plus C / C ++ support」です。

今、私が強調する必要があるものがありますEmacsはあなたに完全な自由を与えます。開始方法は任意に選択できます。難しい方法または簡単な方法。

簡単な方法は、私のセットアップをコピーするだけです(または、GitHubで誰かのセットアップをコピーし、最初に星を数えます)。5分で、完全に機能するC ++ IDEが完成します。VSはその5分間で起動を完了していません。

難しい方法は、セットアップをゼロから微調整することです。難しい方法を選択した場合、Emacsに文句を言わないでください。それはあなたの選択です。

ところで、長期的には、Emacs Lispの知識が少し役立つかもしれません。プロのC ++開発者にとっては、MS sh * tで無駄にした時間と比べると、ささいなことだと思います。何年も前に、MSはいくつかのWindowsアップデートでVCランタイムをサイレントにアップグレードしました。私の製品は会社のマシンで正常に動作しましたが、顧客のコンピューターでクラッシュしました

その事件の後、私はリチャード・ストールマンを理解し始めました。


1
面白い。「CMakeを使用する必要があります」->つまり、autoconfまたは個人用スクリプトを使用するランダムなフリーソフトウェアパッケージで作業するときは、ラッパーを作成する必要があるということCMakeLists.txtです。
ステファンGourichon

1
代わりにGNU Globalを使用できますが、cmakeソリューションほど完璧ではありません。しかし、より柔軟な、blog.binchen.org / posts / emacs
chen bin

5

#4については、長年使用してきたexuberant-ctagsと組み込みタグのサポートを強くお勧めします。あるいは、最近、GNU Globalとggtagsパッケージを使用するように切り替えたところ、それらがわずかに優れていることがわかりました。ただし、機能はほぼ同じです。どちらもほとんど設定なしで機能します。他のIDE機能については、オートコンプリートパッケージも気に入っています。同様に、私はM-x compile広範囲に使用し、グローバルキーを次および前のエラーにバインドします。「プロジェクト」内で検索するために、私は通常、単に使用しますM-x find-grep。次と前のエラーに同じキーバインディングを使用することに注意してください。


4

ソフトウェア「プロジェクト」の管理。プロジェクト内で検索と置換などの機能を実行できるように、IDEに現在のプロジェクトを構成するすべてのファイルの意味を持たせたい。(ソースツリーに多数のサポートファイルを散らかさずにこれを実現できればいいと思います。プロジェクトごとに複数の集中プロジェクトファイルが必要なのはなぜですか?)

発射物は、emacsのプロジェクト管理に最適なオプションのようです。非常に軽量で、プロジェクトに余分なファイルを追加する必要はありません。特定の特殊ファイルの存在に基づいて、プロジェクトを自動的に検出しようとします。たとえば、gitリポジトリで作業している場合、発射物はそれをプロジェクトとして扱います(gitによって追跡されるすべてのファイルはプロジェクトの一部として扱われます)projectile-find-file。プロジェクトごとに動作する他のコマンドがたくさんあります。

エラー報告。ビルドツールによって報告されたエラーを見つけるために、500行以上の出力を読む必要はありません。エラーは、エラーごとに1行で、独自のバッファーに表示されることが望ましいです。

Flycheckは、clang / gccを使用した構文チェックをサポートしています。

プロジェクト内のシンボルの認識、およびそれらが定義されている場所。プロジェクトファイルにあるか、システムインクルードファイルにあるかに関わらず、シンボル定義にジャンプしたい

rtagsをご覧になることをお勧めします。バックエンドとしてclangを使用し、定義と完了にジャンプするかなり良い仕事をしています。また、flymakeと統合してclangを使用してエラーと警告を表示するため、#3で役立ちます。それに加えて、リファクタリングのサポートが制限されています。インテリジェントなオートコンプリートの別のオプションは、アイロニーモードです


2

現在Emacsに同梱されているCEDETバージョンはセットアップが困難ですが、公式サイトで入手できる方がセットアップが簡単で、#2および#4のニーズに応えることができます。

CEDETのEDEを使用すると、たとえばmakefileおよびautomakeプロジェクトを管理し、ターゲットを追加し、ファイルをターゲットに関連付けることができます。その後、EDEコマンドを使用してプロジェクトをコンパイルできます。Emacsの組み込みコンパイルモードを使用するため、ニーズ#3も満たされます。

CEDETのセマンティックには、C ++などのいくつかの言語のパーサーがあります。exuberant-ctagsやGNU Globalなど、ファイルに定義されているタグを取得できますが、正確な自動補完機能やジャンプ機能も備えています。「foo」と呼ばれる2つのメソッドがある場合、セマンティックのジャンプは適切な1つをもたらすのに十分スマートです。

#1については、個人的に発射体を使用し、数回前に#5でGDBを使用しました。

#3のヒント:EDEがM-x recompile使いすぎている場合、Emacsには最後のコンパイルコマンドを起動するコマンドがあるため、最初にコンパイルを実行してからrecompile、任意のバッファーで使用できます。


1

#4の場合、YouCompletemeと呼ばれる新しいプロジェクトであり、次のクールなものと思われる対応するEmacsクライアントのようです。clangを使用するため、タグやグローバルよりもコードの見方が優れています。


1
提案に感謝しますが、うまく統合できるものを探しているので、プロトタイプのEmacsクライアントでVimプラグインを使用して機能の1つを取得しようとするのが最良の出発点であることはわかりません。
nispio

3
emacsクライアントの代わりにgithub.com/abingham/emacs-ycmdを試してください(github.com/Valloric/YouCompleteMeではなくgithub.com/Valloric/ycmdを使用していることに注意してください)。会社モード(ここの他の回答で推奨)で動作するため、他のEmacsとうまく統合できます。ycmdとcompany-ycmdはMELPAからインストールできます(sprunge.us/LXGYが私の構成です)。ycmdのビルド手順に従います。唯一の課題は、コンパイルフラグをgithub.com/Valloric/ycmd/blob/master/examples/…の
unhammer

1

ソースリポジトリ+ ECB + gtags + cscopeのCEDETに満足しています。そうは言っても、この投稿には私がやろうとしている多くの提案があります。


1
これらすべてのツールを連携させるために何をしなければならないかについて説明していただけますか?
nispio 14年

4
現在、これは見当違いのコメントのように見えます。:-)あなたが親切にするなら、少し詳しく説明してください。
マラバルバ14年

簡潔で申し訳ありません。StackExchangeアプリは、慣れるのにドームを必要とします。このソリューションは、シンボルナビゲーションとソースの分析を扱う#4に答えます。もちろん、CEDETにはセマンティックが含まれています。ECBはEmacsコードブラウザーであり、CEDETを使用してメソッドをリストし、シンボル情報を報告します。GtagとCscopeは両方とも、ソースベースからシンボル情報のテーブルを構築し(ヘルムもこれを行います)、Emacsと統合してタグまたはシンボルによるナビゲーションを可能にします。
クレイハアパラ

1

上記の部分で述べたように、発射体(オプションでヘルム付き)は、プロジェクト管理のための素晴らしいソリューションです。

Ycmdはコード補完とナビゲーションに最適であり、最適なクライアントはemacs-ycmdです(完全開示:emacsクライアントを作成しました)。

「タグ」と索引付けに関して、私が見つけた最良の全体的な解決策はコードサーチです(詳細はこちら:これも書きました。)それは本当に正規表現の検索を行うという点でかなり馬鹿げていますが、非常に高速で一般に必要なものはすべてあります、複数の言語でうまく機能します。

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