Zuerst ein Kommentar zu Ihrem Alias. Während die emacswiki-Seite vorschlägt, dass dies alias mv 'mv -v $*'
richtig ist, sagt die entsprechende offizielle Handbuchseite , dass Sie alias mv mv -v
stattdessen verwenden sollten. Im Folgenden gehe ich davon aus, dass die Handbuchseite richtig ist.
Es sieht aus wie eshell-maybe-replace-by-alias
ein Buggy (zumindest in Emacs 25.2.1).
Die aktuelle Implementierung ist
(defun eshell-maybe-replace-by-alias (command args)
"If COMMAND has an alias definition, call that instead using ARGS."
(unless (and eshell-prevent-alias-expansion
(member command eshell-prevent-alias-expansion))
(let ((alias (eshell-lookup-alias command)))
(if alias
(throw 'eshell-replace-command
`(let ((eshell-command-name ',eshell-last-command-name)
(eshell-command-arguments ',eshell-last-arguments)
(eshell-prevent-alias-expansion
',(cons command eshell-prevent-alias-expansion)))
,(eshell-parse-command (nth 1 alias))))))))
Das throw
Formular ersetzt den auszuführenden Befehl. Im eshell-parse-command
Alias wird ersetzt, aber die Argumente gehen verloren.
Meine Schale zeigt das erwartete alias
Verhalten, wenn ich args
es eshell-parse-command
über die folgende Überschreibung hinzufüge :
(defun eshell-maybe-replace-by-alias-bugfix-25.2.1 (command args)
"If COMMAND has an alias definition, call that instead using ARGS."
(unless (and eshell-prevent-alias-expansion
(member command eshell-prevent-alias-expansion))
(let ((alias (eshell-lookup-alias command)))
(if alias
(throw 'eshell-replace-command
`(let ((eshell-command-name ',eshell-last-command-name)
(eshell-command-arguments ',eshell-last-arguments)
(eshell-prevent-alias-expansion
',(cons command eshell-prevent-alias-expansion)))
,(eshell-parse-command (nth 1 alias) args)))))))
(advice-add #'eshell-maybe-replace-by-alias :override #'eshell-maybe-replace-by-alias-bugfix-25.2.1)
Beachten Sie, dass ich bereits einen Fehlerbericht anbug-gnu-emacs@gnu.org
gesendet habe .
Vielen Dank für die Behebung dieses Problems im Hauptzweig von Emacs an Noam Postavsky:
http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=e66e81679c3c91d6bf8f62c7abcd968430b4d1fe