Ich bin sehr angetan von ivy
Vollendung und von der Liebe, dass ein einfaches Verfahren (ivy-mode 1)
ausreicht, um ivy
fast überall dort anzukommen, wo Emacs eine Art Vollendung verwendet (die durch Überschreiben completeing-read
, glaube ich, vollendet wird ). Dies ist jedoch nicht eshell
für die Verwendung ivy
zum Vervollständigen von Registerkarten geeignet . Ich mag eshell
die Liste der Abschlusskandidaten, würde aber die ivy
Benutzeroberfläche vorziehen , um unter ihnen auszuwählen. Gibt es eine Möglichkeit, was eshell
auch immer verwendet wird, um Abschlusskandidaten zu produzieren und diese an "Efeu" weiterzugeben?
16
(add-hook 'eshell-mode-hook '(lambda ()
darum gewickelt werden muss.pcomplete
der Standardabschluss-Benutzeroberfläche den Vorzug gab .Ich habe etwas gefunden, das beim ersten Testen in Ordnung
<tab>
zu sein scheint: Im Wesentlichen neu binden anpcomplete-std-complete
, aber da diese Funktion aus irgendeinem Grund nicht interaktiv ist, müssen Sie sie umbrechen :Die
pcompete-std-complete
Versuche, die Vervollständigungen zu verwenden, die fürpcomplete
die Standard-Vervollständigungs-Benutzeroberfläche geschrieben wurden,ivy
werden standardmäßig außer Kraft gesetzt (mit dem jüngsten Update werden sie in einem netten Overlay direkt im eshell-Puffer in der Nähe von point angezeigt!).Die Kommentare im Quellcode von
pcomplete-completions-at-point
(waspcomplete-std-complete
davon abhängt) erwähnen einige potenzielle Probleme:Ich denke, der erste hat keinen Einfluss auf mich, da ich glaube, dass ich
<tab>
nur am Ende der Eingabezeile drücke . Das zweite Problem habe ich auch noch nicht gesehen.BEARBEITEN: Für diejenigen, die mit den Macken von eshell nicht vertraut sind (dies ist ein Euphemismus), sollte ich vielleicht Folgendes hinzufügen, um den Schlüssel von eshell wie oben vorgeschlagen neu zu binden:
Bevor Sie mich wegen des verschwenderischen Keybindings-in-a-Hook Antipatterns anschreien, lassen Sie mich erklären, dass eshell seine Keymap mit deklariert
(defvar eshell-mode-map nil)
und dies dann im(setq-local eshell-mode-map (sparse-keymap))
Inneren tuteshell-mode
! (Der Code hat eine hilfreiche;; FIXME: What the hell!?
.) Das bedeutet, dass Sie Schlüssel erst nach dem Ausführen neu binden könneneshell-mode
! Daher der Haken.quelle
helm
es nicht bereits in dieeshell
Tab-Vervollständigung eingehthelm
.