[解決済み] Emacsのためのタグ。etags, ebrowse, cscope, GNU Global と exuberant ctags の関係
質問
私はC++のプロジェクトに携わっていますが、Alex Ottの のCEDETガイドを読みました。 や StackOverflow のタグに関する他のスレッドを読みましたが、自動補完、定義の検索、ソース コード ベースのナビゲーション、または doc-string のプレビューを容易にするために Emacs がこれらの異なるタグ システムとどのようにインターフェースするかについては、まだ混乱しています。
-
との違い (例えば機能面) は何ですか?
etags
,ebrowse
,exuberant ctags
,cscope
,GNU Global
そしてGTags
? で使用するにはどうすればよいのでしょうか? Emacs ? -
タグを使用してシンボルをナビゲート/オートコンプリートする場合、セマンティック/セネター (CEDET) が必要ですか?
-
これらの異なるタグユーティリティの上に、semantic は何をもたらすのでしょうか?これらのツールとのインターフェイスはどうなっているのでしょうか?
どのように解決するのですか?
それは私が最近ここで読んだのと同じくらい良い質問なので、私はより詳細に違いを説明しようと思います。
ポイント1:
etags
そして
ctags
は、ソースファイルにある言語オブジェクトのインデックス(別名タグ/TAGS)ファイルを生成し、テキストエディタや他のユーティリティでこれらのアイテムを迅速かつ容易に見つけることができるようにします。タグは、インデックス・エントリが利用可能な言語オブジェクトを意味します(または、そのオブジェクトのために作成されたインデックス・エントリも意味します)。ctagsによって生成されたタグはメタデータが豊富ですが、 Emacsは追加データをどうせ解釈できないので、多かれ少なかれ同じと考えるべきです (主な利点は
ctags
の主な利点は、より多くの言語をサポートすることです)。タグファイルの主な用途は、クラス/メソッド/関数/コンスタント/等の宣言/定義を検索することです。
cscope
ははるかに強力な獣です (少なくとも C/C++ と Java が関係している限り)。多かれ少なかれ同じ原理 (有用なメタデータのファイルを生成する) で動作しますが、シンボルへのすべての参照を見つける、関数が呼び出されている場所を確認するなど、より気まぐれなことができます (定義も同様に見つけることができます)。
要約すると
ctags
は、シンボルの宣言や定義に移動することができます(一部では
一方向ルックアップ
).
ctags
は多くの言語で有用な汎用ツールです。
一方、(プロジェクトのページで紹介されているように)
cscope
を使えば
- シンボルの宣言に移動する
- シンボルへの全参照の選択可能なリストを表示する
- 任意のグローバル定義を検索
- ある関数から呼び出される関数
- 関数を呼び出す関数
- 文字列の検索
- 正規表現パターンを検索
- ファイルの検索
- あるファイルを含むすべてのファイルを検索
この時点で誰もが驚くことではありませんが、私が C/C++ プロジェクトを扱うとき、私は頻繁に
cscope
を多用し
ctags
. 他の言語を扱う場合は、状況は明らかに逆になります。
ポイント2。
インテリジェントなオートコンプリートを行うには、真の ソースコードパーサ (そうでなければ、アプリケーション内のオブジェクト (たとえば) の型や、オブジェクトに対して呼び出すことのできるメソッドを知ることができないからです。多くの異なるソースに基づいて自動補完を行うことができますが、最良の結果を得るためには、最終的にパーサーが必要になります。シンタックスハイライトも同様で、現在Emacsのメジャーモードでのシンタックスハイライトは単に正規表現に基づいており、非常に壊れやすく、エラーが発生しやすいものです。Emacs 23.2 のセマンティック (それ以前は外部パッケージでした) の搭載により、より多くの用途 (バッファのソース コードを解析して適切にハイライトするために使用するなど) を見始められるとよいのですが......。
Emacs 24.1以降、semanticはEmacsの補完フレームワークから使用できるようになりました。それをテストする最も簡単な方法は、C ソース コード ファイルを開いて、次のように入力することです。 M-TAB または C-M-i を実行すると、 自動的にセマンティックが完了するのを見ることができます。セマンティックがデフォルトで有効になっていない言語では、選択したメジャーモードフックに次の行を追加することができます。
(add-to-list 'completion-at-point-functions 'semantic-completion-at-point-function)
ポイント3
semanticは(現在サポートしているいくつかの言語に対して)真のコード認識をもたらし、IDEとEmacsの間のギャップを埋めることができます。のようなツールとのインターフェイスはありません。
etags
と
cscope
を併用できないわけではありません。
私の説明が意味を持ち、あなたにとって有用であることを願っています。
追伸:私はあまり詳しくないのですが
global
と
ebrowse
などがありますが、記憶が確かならetagを使用していたはずです。
関連
-
[解決済み] EmacsとVimの違い
-
[解決済み] Emacsがバックアップファイルを作成する方法を制御するにはどうすればよいですか?
-
[解決済み] EmacsをIDEとして使用する
-
[解決済み] Emacsで*scratch*バッファを再オープンする?
-
[解決済み] Emacsで行を丸ごと複製するには?
-
[解決済み] Emacsで複数のシェルを実行する方法
-
[解決済み] パッケージ名のリストを指定して、Emacsのパッケージを自動的にインストールするには?
-
[解決済み] Emacsのデフォルトフォルダを変更する
-
[解決済み] emacs/elispです。ハッシュ(ポンド、数字記号、オクトパス)記号は何のために使うのですか?
-
[解決済み] emacs が ido を有効にして新しいファイルを作成する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ディスク上のファイルが変更されたとき、Emacsがすべてのバッファを自動で更新するようにするには?
-
[解決済み] EmacsをIDEとして使用する
-
[解決済み] Emacsに(repeat-last-command)はないのですか?
-
[解決済み] Emacsでコードの折りたたみ効果を得るには?
-
[解決済み] パッケージ名のリストを指定して、Emacsのパッケージを自動的にインストールするには?
-
[解決済み] EmacsでSSHとSudoを使ってファイルを開く
-
[解決済み] Emacsのデフォルトフォルダを変更する
-
[解決済み] 現在のファイルのフルパスをミニバッファに表示する機能
-
[解決済み] emacs が ido を有効にして新しいファイルを作成する
-
[解決済み] イービルモードのベストプラクティス?[クローズド]