Đầu tiên một nhận xét về bí danh của bạn. Mặc dù trang emacswiki cho thấy điều đó alias mv 'mv -v $*'
đúng nhưng trang hướng dẫn chính thức tương ứng nói rằng bạn nên sử dụng alias mv mv -v
thay thế. Sau đây tôi giả sử rằng trang hướng dẫn là đúng.
Có vẻ như eshell-maybe-replace-by-alias
là lỗi (ít nhất là trong emacs 25.2.1).
Việc thực hiện hiện tại là
(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))))))))
Biểu throw
mẫu thay thế lệnh sẽ được thực thi. Trong eshell-parse-command
bí danh được thay thế nhưng các đối số bị mất.
Eshell của tôi hiển thị alias
hành vi dự kiến nếu tôi thêm args
vào eshell-parse-command
thông qua ghi đè sau:
(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)
Lưu ý rằng tôi đã gửi một báo cáo lỗi đếnbug-gnu-emacs@gnu.org
.
Cảm ơn bạn đã khắc phục sự cố này trong nhánh chính của emacs, truy cập Noam Postavsky:
http://git.savannah.gnu.org/cgit/emacs.git/commit/?id=e66e81679c3c91d6bf8f62c7abcd968430b4