Wie bekomme ich Code-Vervollständigung in Emacs?


20

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?

Antworten:


27

Die grundlegende Methode, die für alle Arten von Puffern in Emacs verwendet werden kann, ist die dynamische Abkürzung, die beim Drücken von M-/(auch bekannt als alt+ /) verwendet wird.

Dadurch wird der Text erweitert, um andere Zeichenfolgen zu duplizieren, die bereits in Ihrem aktuellen Puffer oder in anderen derzeit geöffneten Puffern vorhanden sind.

Für eine umfassendere Codevervollständigung, die für C ++ oder Java (oder andere) sprachspezifisch ist, sollten Sie sich ein Codevorlagen- oder Code-Snippet-Paket ansehen. In dieser verwandten Frage zu StackOverflow werden einige Fragen behandelt . Eine, die in diesen Diskussionen häufig erwähnt wird, ist yasnippet - in diesem Beitrag auf einem Emacs-Blog gibt es eine Screencast-Demo .


+1. Vielleicht möchten Sie auch die Standardbibliothek complete.elausprobieren. Es ist sehr alt und wenig bekannt, aber die Art der In-Buffer-Vervollständigung kann nützlich sein. M-x find-library completeLesen Sie dann den Kommentar in der Datei.
Drew

21

@ 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).

  1. 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üfenhippie-expand-try-functions-list

  2. 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.

  3. 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.

  4. 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 TABSchlüssel, den der Firmenmodus / die Semantik / die automatische Vervollständigung verwendet

Wenn 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 dann company-eclimKandidaten erhalten können, die nicht Null sind, companydenken Sie , Sie schreiben Java, so dass es KEINE Backends mehr ausführt company-eclim.

Nun schauen wir mal (company-dabbrev-code company-gtags company-etags company-keywords). Alle diese vier Backends werden zusammen verwendet. Zum Beispiel werden company-dabbrev-codedie 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-rtagsz. B.).


Welches ist das beste Paket für die automatische Vervollständigung in Emacs 24 für Latex?
Promotion

@doctorate Ich denke, Sie müssen Auto-Vervollständigung und die Quelle emacswiki.org/emacs/AutoCompleteSources verwenden , aber ich bin ein Programmierer anstelle eines Latexbenutzers. Sie sollten also bei Google und der Emacs-Community nachschauen , da sind viele Akademiker .
Chen Bin

Bitte beachten Sie, dass der Firmenmodus auch Latex unterstützt. Also schlage ich Unternehmen vor, anstatt automatisch zu vervollständigen
chen bin

2

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.


0

Kurze Antwort: M-/

Lange Antwort: RTFM :-)


6
+1, Gott, ich hoffe, die nächste Frage, die ich sehe, ist "Brauchen Sie Hilfe mit RTFM-Befehl"
Rownage

@ Rownage: Oh, das ist "info-emacs-manual" ( C-h r)
SamB

1
Wie wäre es C-h k M-/?
Doug Harris
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.