私はEmacsの初心者です。大規模なC++プロジェクトで使用するためにEmacsを使用して、特にコードのインデックス作成と関数名のオートコンプリートを行い、Eclipseのように動作する方法を検索する必要があります。私はしばらくの間Vimを使用していて、プロジェクトのコードにインデックスを付けるためにctagsを使用し、Vimはオプションのドロップダウンメニューを使用してコードをオートコンプリートしようとしていました。私は今Emacsで同じことを達成しようとしています。しかし、私の検索中に、結果はCEDET、オートコンプリート、およびその他のサードパーティのプラグインを示していました。
ctags -e -R .
とetagsでctagsを使おうとしましたが、成功しませんでした。
同じ動作を実現するためのEmacsのデフォルトの方法がありませんか?私が望むことを達成するための最良かつ最も簡単な方法はどれですか?
オートコンプリートでCEDETを正常に使用しています。基本的に、オートコンプリートはドロップダウンボックスプロバイダーであり、さまざまなものからソースを取得します。最も興味深いのは、CEDETからです(etagsやGnu Globalからも取得します。これもお勧めします)。
CEDETの良い出発点は http://alexott.net/en/writings/emacs-devenv/EmacsCedet.html
Alex Ottのemacs構成は次のとおりです: https://github.com/alexott/emacs-configs -これは便利なリソースです。
BzrからCEDETを取得し、オートコンプリートを正しくインストール/構成する必要があることに注意してください。 el-getにオートコンプリート(およびその他の機能も)をインストールすることを強くお勧めします。構造化EDEプロジェクトの一部ではないランダムなC/C++ファイルに対してオートコンプリートが機能するようにするには、EDEの汎用プロジェクトを設定する必要があります。
Emacsを設定するのに少し時間を費やす必要がありますが、それは報われます。このツールは、正しく設定すると驚くほど生産性が高くなります。
インデックス作成
Ctagsの代わりに GNU/global を使用することをお勧めします。これはC++をサポートし、大規模なプロジェクトではより効率的だと思います(特に、インデックスを最初から再構築する代わりに更新できるため)。そして、そのCEDET /セマンティックを使用する方がはるかに簡単です(これは、セットアップに時間を費やす場合にも素晴らしいツールです)。
使用例:
$ cd sources
$ gtags -v # create the index
$ cd subdirectory
$ [hack hack hack]
$ global -u # update the index (can be called from anywhere in the project)
Emacsで、ソースコードバッファのgtags-mode
をアクティブにして、gtagsコマンドにアクセスします。
gtags-find-tag
(M-.):ソースファイルで指定されたタグの定義を検索します(gtags
を使用すると、可能な定義が複数ある場合はすべてから選択でき、可能性が1つしかない場合は直接ジャンプできます)gtags-pop-stack
(M-*):前の場所に戻るgtags-find-rtag
:ソースファイルで指定されたタグのすべての使用法を検索します以下は、gtags
の構成です。これは、インデックスが見つかった場合にgtags-mode
を自動的にアクティブにします。
;; gtags-mode
(eval-after-load "gtags"
'(progn
(define-key gtags-mode-map (kbd "M-,") 'gtags-find-rtag)))
(defun ff/turn-on-gtags ()
"Turn `gtags-mode' on if a global tags file has been generated.
This function asynchronously runs 'global -u' to update global
tags. When the command successfully returns, `gtags-mode' is
turned on."
(interactive)
(let ((process (start-process "global -u"
"*global output*"
"global" "-u"))
(buffer (current-buffer)))
(set-process-sentinel
process
`(lambda (process event)
(when (and (eq (process-status process) 'exit)
(eq (process-exit-status process) 0))
(with-current-buffer ,buffer
(message "Activating gtags-mode")
(gtags-mode 1)))))))
(add-hook 'c-mode-common-hook 'ff/turn-on-gtags)
自動完了
auto-complete
よりも優れたツールはありません。 Emacsに含まれていない場合でも、パッケージングシステムを使用して非常に簡単にインストールできます(たとえば、 marmalade または melpa リポジトリ)。
IDEで何を探しているかによって異なります。私はかなり大規模なC++プロジェクトにEmacsを使用しています。もちろん、他のIDEと同じように機能するように、emacsを構成する必要があります。
しかし、そうです、CEDETは完璧ではありませんが、スタートです。
ただし、Emacsには非常に優れたオートコンプリートモードがあります http://cx4a.org/software/auto-complete/ それはインテリセンスではありませんが、何らかの方法でCEDETと統合して、運命を与える必要があります。良好なオートコンプリート。
私がよく使用するもう1つの重要な機能は、ヘッダーファイルと実装ファイルから簡単にジャンプできる関数ff-find-other-file
です。
そしてもちろん、あなたはあなた自身の建物を転がす必要があります。 CEDETはプロジェクトをある程度サポートしていますが、私はテストしていません。ただし、Emacsはmakeなどのコマンドラインビルドツールとうまく統合できます。エラーはバッファに出力され、Emacs内で簡単に正しい行にジャンプできます。
GDBはEmacsM-x gdb
ともうまく統合されているので、gdb-many-windows
コマンドを覚えておいてください。
CppCon2015でのAtilaNevesのライトニングトーク「 C++ IDEとしてのEmacs 」をご覧になることをお勧めします。
詳細については、 この関連する質問 に対する私の回答を参照してください。
私はGNUグローバルプラグインと2つの人気のあるEmacsプラグインを使用しています:
コード補完のための会社
コードナビゲーション用のemacs-helm-gtags