Ich weiß, dass Emacs die Codevervollständigung unterstützt. Aber um ehrlich zu sein, war ich noch nie ein guter FAQ-Leser, zumindest für etwas, das mir völlig neu ist. Ich frage mich also, was ich herunterladen muss und wie Emacs für mich in C ++ und Java eine intelligente Codevervollständigung bewirken können. Oder gibt es ein Paket, das Code für viele der wichtigsten Sprachen vervollständigt?
20
complete.el
ausprobieren. Es ist sehr alt und wenig bekannt, aber die Art der In-Buffer-Vervollständigung kann nützlich sein.M-x find-library complete
Lesen Sie dann den Kommentar in der Datei.@ Dougs Antwort ist etwas veraltet und sein Fokus liegt auf der Erweiterung des Codes durch vordefinierte Snippets.
Ich denke, die Frage des OP ist über Intellisense (Auto-Vervollständigung Methodenname einer Klasse zum Beispiel).
hippie expand war früher beliebt, der syntax analyzer ist emacs tags . Daher unterstützt es alle Sprachen, die ctags unterstützt (einschließlich C ++ , Java). Das Ergebnis ist jedoch nicht perfekt, da ctags nur reguläre Ausdrücke verwendet, um den Code zu analysieren. Siehe mein init-hippie-expand.el für Details. Sie könnten damit beginnen, den Wert von zu überprüfen
hippie-expand-try-functions-list
Auto-Vervollständigung ist eine moderne mit ausgefallener Benutzeroberfläche (Dropdown-Menü, auch im Konsolenfenster). Wenn Sie clang als Backend verwenden. Der Intellisense ist viel besser. Um den Clang zum Laufen zu bringen, musst du den Auto-Vervollständigungs-Clang installieren, der das Plugin für die automatische Vervollständigung ist. Es unterstützt nur die Sprachclang-Unterstützung (C / C ++ / Obj-C). Wie Sylvain Benner betonte, können Sie Emacs-Eclim als das Java-Parsing-Back-End verwenden, das die ausführbare Datei von Eclipse aufruft. Auto-Vervollständigung kann also Java unterstützen. Siehe mein init-auto-complete.el für Details.
semantic bietet sowohl die Benutzeroberfläche als auch die Back-End-Parsing-Engine. Es ist langsam. Die Dropdown-Benutzeroberfläche ist in Ordnung, erfordert jedoch ein X-Fenster. Das Intellisense-Ergebnis ist besser als ctags. Und die Dokumentation ist zu geeky für mich. Siehe init-semantic.el für Details.
Der Firmenmodus ähnelt dem automatischen Vervollständigen. Der Unterschied besteht darin, dass alles in einem Bundle zusammengefasst wird. Zum Beispiel müssen C ++ - Entwickler nur den Firmenmodus installieren (für die automatische Vervollständigung ist ein Plugin eines Drittanbieters erforderlich). Ein weiterer Unterschied in der Benutzeroberfläche ist, dass das Unternehmen den Kandidaten automatisch anzeigt . Sie drücken also weniger Tasten in Gesellschaft. Es ist möglich, dasselbe bei der automatischen Vervollständigung nach der Anpassung zu tun.
Zusammenfassend sind Auto-Vervollständigung, Unternehmen zwei beliebtesten Wahl. Semantic und Hippie-Expand sind ebenfalls willkommen, werden aber weniger genutzt. Andere sind zu trivial, um sie zu erwähnen, und ihre Merkmale werden bereits von den großen Vieren abgedeckt. Beispielsweise könnte die automatische Vervollständigung yasnippet als Eingabequelle verwenden (die automatische Vervollständigung stellt die Benutzeroberfläche bereit, die tatsächlichen Kandidaten werden jedoch vom yasnippet-Back-End erstellt).
Ich schlage vor, entweder Auto-Vervollständigung oder Firma als Haupt-Plugin für die Code-Vervollständigung und entweder Semantik oder Hippie-Erweiterung als ergänzendes Plugin zu verwenden .
Ich benutze Firmenmodus und Hippie-Expand, weil,
Jetzt (Jahr 2017) wird der Firmenmodus aktiver gepflegt als das automatische Vervollständigen und verfügt über mehr Plugins von Drittanbietern (z. B. Latex-Plugin).
Hippie-Expand ist nicht sehr aktiv, belegt aber keinen
TAB
Schlüssel, den der Firmenmodus / die Semantik / die automatische Vervollständigung verwendetWenn Sie den Firmenmodus für C ++ / Java verwenden, möchten Sie möglicherweise Änderungen vornehmen
company-backends
.Noch ein paar Tipps zum Firmenmodus,
Möglicherweise müssen Sie den Wert von anpassen
company-backends
. Angenommen, sein Wert ist(company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords))
. Wenn Sie danncompany-eclim
Kandidaten erhalten können, die nicht Null sind,company
denken Sie , Sie schreiben Java, so dass es KEINE Backends mehr ausführtcompany-eclim
.Nun schauen wir mal
(company-dabbrev-code company-gtags company-etags company-keywords)
. Alle diese vier Backends werden zusammen verwendet. Zum Beispiel werdencompany-dabbrev-code
die anderen drei Backends auch dann ausgeführt , wenn Nicht-Null-Kandidaten erfolgreich abgerufen wurden.In der Praxis ist es häufig erforderlich, die Reihenfolge der Backends neu anzupassen oder ein neues Backend hinzuzufügen (
company-rtags
z. B.).quelle
Kurze Antwort: Ich kenne keinen für Emacs, der für Java nützlich ist. Die dynamische Erweiterung kümmert sich nicht um die Bibliotheken in Ihrem Klassenpfad. Sie weiß nichts über den Code, den Sie eingeben. Sie kann nur auf Text erweitert werden, der bereits in einem der Puffer vorhanden ist. JDE und emacs-eclim versuchen, diese Funktionalität bereitzustellen, aber ich persönlich war nicht beeindruckt.
quelle
Kurze Antwort:
M-/
Lange Antwort: RTFM :-)
quelle
C-h r
)C-h k M-/
?