Ich habe etwas gefunden, das beim ersten Testen in Ordnung <tab>
zu sein scheint: Im Wesentlichen neu binden an pcomplete-std-complete
, aber da diese Funktion aus irgendeinem Grund nicht interaktiv ist, müssen Sie sie umbrechen :
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))
Die pcompete-std-complete
Versuche, die Vervollständigungen zu verwenden, die für pcomplete
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
(was pcomplete-std-complete
davon abhängt) erwähnen einige potenzielle Probleme:
;; FIXME: it only completes the text before point, whereas the
;; standard UI may also consider text after point.
;; FIXME: the `pcomplete' UI may be used internally during
;; pcomplete-completions and then throw to `pcompleted', thus
;; imposing the pcomplete UI over the standard UI.
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:
(add-hook 'eshell-mode-hook
(lambda ()
(define-key eshell-mode-map (kbd "<tab>")
(lambda () (interactive) (pcomplete-std-complete)))))
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 tut eshell-mode
! (Der Code hat eine hilfreiche ;; FIXME: What the hell!?
.) Das bedeutet, dass Sie Schlüssel erst nach dem Ausführen neu binden können eshell-mode
! Daher der Haken.
(add-hook 'eshell-mode-hook '(lambda ()
darum gewickelt werden muss.