回答:
最初にあなたのエイリアスに関するコメント。一方でemacswiki-ページはことを示唆してalias mv 'mv -v $*'
いる権利対応する公式マニュアルページは、あなたが使用する必要があると述べているalias mv mv -v
代わりに。以下では、マニュアルページが正しいと想定しています。
eshell-maybe-replace-by-alias
バグが多いようです(少なくともemacs 25.2.1では)。
現在の実装は
(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))))))))
throw
フォームを実行するコマンドを置き換えます。でeshell-parse-command
、エイリアスに交換されますが、引数が失われます。
次のオーバーライドを介してalias
に追加args
した場合、私のeshellは予想される動作を示しeshell-parse-command
ます。
(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)
既にバグレポートをにbug-gnu-emacs@gnu.org
送信していることに注意してください。
emacsのマスターブランチでこの問題を修正していただきありがとうございます。NoamPostavskyに送信され ます。