Emacs kann nicht mit einer anderen IDE konkurrieren, wenn keine automatische Vervollständigungsfunktion vorhanden ist. Auto-Vervollständigung macht mich einfach zu einem effizienteren Programmierer. Ich kenne die Erweiterung Auto Complete Mode , aber sie funktioniert nicht mit C ++.
Wie kann ich eine intelligente und effiziente Autovervollständigung für C ++ erreichen?
Diese Frage wurde ursprünglich von Malabarba zum Vorschlag für Area 51 gestellt: Wie erhalte ich eine intelligente automatische Vervollständigung in C ++?
c++
completion
Luke
quelle
quelle
Antworten:
Disclaimer: Ich bin der Autor von Irony-Mode
Wenn Sie nur eine intelligente automatische Vervollständigung wünschen, kann ich den Ironie-Modus mit der Firmen-Ironie empfehlen .
Ein weiteres Tool, das noch nicht erwähnt wurde, ist emacs-ycmd .
quelle
irony-mode
clang_codeCompleteAt
mit einer analysierten TU (aber nicht gespeicherten Änderungen) 3-5 Sekunden dauern. Istirony-mode
schneller als das?Überprüfen Sie meinen Führer . Es werden verschiedene Methoden für die automatische Vervollständigung in C / C ++ aufgelistet.
Diese Optionen sind:
Mit Ironie . Sehr zu empfehlen, da es mit Clang arbeitet und im Vergleich zu anderen Lösungen einfach einzurichten ist.
Verwenden des integrierten Parsers von Emacs. Es ist die beste automatische Vervollständigung, die Sie erhalten können, und zwar im Emacs-Parser Semantic. Bei großen Projekten wie dem Linux-Kernel ist dies jedoch langsam.
Mit
company-mode
Paket mitcompany-clang
. Bietet Code-Vervollständigung für System-Include-Pfade, da die Pfade automatisch von Clang abgerufen werden können, jedoch einige Konfigurationsschritte für das lokale Projekt erforderlich sindVerwenden
company-mode
mitcompany-gtags
. Als Abschluss wird die aus GNU Global generierte Tag-Datenbank verwendet. Sie können diesen verwenden, um Code vollständig lokal für Ihr Projekt bereitzustellen. Es ist nicht gerade intelligent, da es alles in der generierten Datenbank an Sie wirft.rtags
Weiter geht es mit der Bereitstellung eines Servers für die Live-Analyse. Das Setup ist jedoch kompliziert und mit der reinen Elisp-Lösung zu vergleichen.quelle
Ich habe mit RTags + Company große Erfolge erzielt .
RTags benötigt einen separaten Daemon
rdm
, der clang für die Code-Vervollständigung, die Code-Navigation und das Refactoring verwendet.rdm
fungiert auch als Datenbank mit Symbolen, was bedeutet, dass die automatische Vervollständigung viel schneller ist als jede Lösung, die nur direkt aufruftclang_codeCompleteAt
.Rdm braucht Informationen der Kompilation Fahnen für Ihre Projekte , die einen Streit sein, aber wenn Sie den Rat von der folgen rtags Seite und Symlink
gcc-rtags-wrapper.sh
zugcc
,g++
,cc
undc++
rdm automatisch mit neuen Compilation Flaggen auf recompile aktualisiert wird.quelle
Lösung 1: Firmenmodus + Klicken
Das einzige Problem ist, dass Sie dem Firmenmodus mitteilen müssen, wo die c / c ++ - Header-Dateien Ihres Projekts durchsucht werden sollen.
Wenn Sie cmake verwenden, können Sie https://github.com/redguardtoo/cpputils-cmake das Setup für Sie durchführen lassen (TIPP: Ich bin der Autor von cpputils-cmake).
ODER
Lösung 2: firmenmodus + gnu global
Nichts weiter zu sagen, Sie müssen die Tags mit dem gnu global cli tool erstellen, wie bereits erwähnt.
quelle
Ich habe cmake-ide verwendet, um Rtags, Flycheck, Ironie und Company-Clang zu konfigurieren.
Jetzt können Sie Ihr Build-System und Ihre bevorzugten statischen Analyse-Emacs-Plugins gleichzeitig konfigurieren !
BEARBEITEN: Beachten Sie, dass Company-Clang Autovervollständigungen bereitstellt, nach denen Sie gesucht haben. cmake-ide kann auch Flycheck und rtags konfigurieren, wodurch mehrere weitere IDE-ähnliche Funktionen hinzugefügt werden.
quelle
Mx-Semantikmodus
www.gnu.org/software/emacs/manual/html_node/semantic/Using-Semantic.html#Using-Semantic
&&
Tags Tabellen
finden . -name "*. [chCH]" -print | etags -
www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html
etags , ctags - Erzeugt eine Tag-Datei für Emacs, vi
manpages.debian.org/cgi-bin/man.cgi?query=etags&apropos=0&sektion=0&manpath=Debian+8+jessie&format=html&locale=de
CMi (oder M-TAB) -Vervollständigung am Punkt. Wenn der semantische Modus aktiviert ist, wird versucht, semantische Parserdaten zu verwenden. Wenn der semantische Modus deaktiviert ist oder fehlschlägt, wird versucht, den Vorgang mit der ausgewählten Tag-Tabelle abzuschließen (siehe Tags).
http://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html#index-C_002dM_002di
M-. (find-tag) fordert den Tag-Namen && auf, zur Definition zu springen
http://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Tag.html#index-M_002d_002e
quelle