2010-01-20 5 views
27

Es scheint viele alternative Emacs-Autovervollständigungsmechanismen zu geben. Ohne eine erschöpfende Suche fällt mir folgendes ein: Ido, Auto-Vervollständigung, Eiszapfen, Puffer-Vervollständigung, Minibuffer-Vervollständigung und Standard-Out of the Box-Vervollständigung. Und dann gibt es Code-Vervollständigung. Viel davon. Und vieles davon ist sprachabhängig. Es wäre sehr nützlich, wenn ein Emacs-Guru oder drei Emacs die Vorteile der Hauptakteure bei der automatischen Vervollständigung von Code und Nicht-Code zusammenfasst. Und da es sich um Stack Overflow handelt, ist es selbstverständlich, die Auto-Completion-Modi zu identifizieren, die am besten für die IDE-ähnlichen Mechanismen von Emacs funktionieren.Sinnvoll aus Emacs-Abschlussmodus-Auswahlmöglichkeiten

aktualisieren: Ich habe gerade entdeckt the Emacs Wiki completion page die meine grundlegende Frage verstärkt: all dieser Entscheidungen, was gut, was weniger gut ist, und wenn Sie nur mit 2-3 welche würden Sie empfehlen, spielen könnte?

Antwort

7

Ich verwende im Allgemeinen zwei Vervollständigungspakete (anders als die integrierte TAB-Vervollständigung in den Minibuffer- und Comint-Puffern).

pabbrev.el - die einen Vorschlag an den Cursor (drücken Sie TAB) zu akzeptieren. Die Auswahl erfolgt anhand der Worthäufigkeit. Ich mag das wegen der visuellen Anzeige dessen, was vervollständigt werden würde - aber es funktioniert meistens nur für eine Vollendung.

hippie-expand - die in der Regel an M-/ anstelle von Dabbrev gebunden ist, weil es alles tut, was Dabbrev tut und mehr. Dies funktioniert gut, wenn Sie einige Alternativen durchgehen müssen, oder wenn Sie einen Dateinamen oder etwas anderes vervollständigen möchten.

Ich mag beide, weil sie keine Mausbewegung erfordern und schnell arbeiten.

4

Ich verwende Standard-Tab-Vervollständigung im Minipuffer für Dateinamen, M-x Befehle und andere Dinge.

Ich verwende auch häufig M-/ Tastenanschlag (dabbrev-expand) für die dynamische Vervollständigung eines beliebigen Wortes in einem Ihrer Emacs Puffer. Es ist fantastisch, besonders für lange Variablennamen. Hier ist die Dokumentation:

 
M-/ runs the command dabbrev-expand, which is an interactive 
autoloaded Lisp function in `dabbrev.el'. 

It is bound to M-/. 

(dabbrev-expand ARG) 

Expand previous word "dynamically". 

Expands to the most recent, preceding word for which this is a prefix. 
If no suitable preceding word is found, words following point are 
considered. If still no suitable word is found, then look in the 
buffers accepted by the function pointed out by variable 
`dabbrev-friend-buffer-function'. 

A positive prefix argument, N, says to take the Nth backward *distinct* 
possibility. A negative argument says search forward. 

If the cursor has not moved from the end of the previous expansion and 
no argument is given, replace the previously-made expansion 
with the next possible expansion not yet tried. 

The variable `dabbrev-backward-only' may be used to limit the 
direction of search to backward if set non-nil. 

See also `dabbrev-abbrev-char-regexp' and C-M-/. 
4

Sie auf unternehmens Modus oder die automatische Vervollständigung Paket aussehen kann, die unterschiedliche Fertigstellung Quellen nutzen könnten, einschließlich cedet, und sie auch neue Abschluss Quellen definieren lassen ... Für einige Programmiersprachen , Sie können CEDET direkt verwenden ...

+2

Sie wahrscheinlich meinen http://cx4a.org/software/auto-complete/index.html, merkwürdiger niemand erwähnte es. Es ist das Beste in meiner Erfahrung. – VitoshKa

+0

Ja, ich meine dieses Paket - ich vergesse immer, welches '-' Zeichen enthält und was nicht ;-) –

8

Wrt Icicles -

Zum größten Teil, Icicles ist über Minipuffer Abschluss. Es gibt ein paar Fälle, in denen es etwas für eine In-Puffer- (z. B. Code-) Vervollständigung bietet, aber es geht hauptsächlich um die Minibuffer-Vervollständigung.

Wenn die meisten Leute über die Minibuffer-Vervollständigung nachdenken, denken sie an Dateinamen-Vervollständigung, Puffer-Name-Vervollständigung und Befehls-Name-Vervollständigung. Aber es gibt ein Los mehr dazu.

Als Emacs-Lisp-Programmierer können Sie die Completion überall dort verwenden, wo Sie Benutzern interaktiv eine Auswahlmöglichkeit bieten möchten. Das ist ziemlich allgemein!

Abschluss ist wirklich über Muster-Matching zu definieren Sets, die Sie dann manipulieren können.

Die meisten Leute denken, dass das einzige Ziel der Minibuffer-Vervollständigung ist, einen einzelnen Namen (Datei, Puffer, Befehl, Variable, ...) zu wählen. Aber die Macht der Vervollständigung besteht eigentlich darin, den vollständigen Satz von Dateinamen, Puffernamen usw. auf verschiedene Arten zu filtern und möglicherweise zu sortieren, und dann die Benutzer etwas an oder mit dem Ergebnis setzen zu lassen (nicht notwendigerweise ein einzelnes Objekt) .

Das ist, was Icicles über ist: Lassen Sie dynamisch (inkrementell) definieren Sätze mit Mustervergleich und wirken dann auf ausgewählte Mitglieder oder alle Mitglieder dieser Sätze. Dies ist

nicht so sehr das Ziel Ido oder die anderen Abschluss-Pakete, mit der möglichen Ausnahme von Helm (Alles).

Im Gegensatz zu Helm (Anything), die Privilegien Namen über Objekttypen und Aktionen als Ausgangspunkt Objekt, in Icicles Sie in der Regel einen Befehl aufrufen etwas auf ein oder mehrere Objekte eines bestimmten Art zu tun (zB Puffern) und dann Sie die Reihe dieser Objekte eingrenzen, in der Regel durch Namensanpassung. Es ist oft der Fall in Icicles, dass Sie auf diese Objekte auf mehrere, aber verwandte Arten innerhalb desselben Befehls handeln können.

In Helm (Alles) im Allgemeinen Ihre Eingabe ist abgestimmt zuerst von Objektnamen gegen das gesamte Universum von Objekten aller Art, und danach verengen Sie unten eine Operation zu holen (n) durchzuführen. Beachten Sie, dass jeder der verschiedenen Komplettierungsansätze sowohl etwas (z. B. Befehle) für Endbenutzer als auch etwas (z. B. Komplettierungsfunktionen) für Programmierer bietet.

Wenn Sie Code-Vervollständigung tun dann wollen Sie in der Regel nur die Namen am Punkt abzuschließen. Das Interessante an der Code-Vervollständigung ist die Bestimmung der geeigneten Kandidaten. Dafür ist der textliche Kontext (z. B. der Code) typischerweise von allergrößter Bedeutung. Um intelligente Auswahlen anzubieten, muss die Vervollständigungsfunktion den Kontext (Code) einschließlich eines umfassenden Kontexts (z. B. Projektcode) analysieren.

Minibuffer Abschluss auf der anderen Seite kann für jede Art von Auswahl und Aktion verwendet werden, einschließlich Multiple-Choice mit mehreren Aktionen. Hier sind alle Teile interessant: was Kandidaten zu bieten haben, was man mit ihnen machen kann, usw.

Weiß nicht, ob das hilft, aber das ist meine Meinung jedenfalls.