Đặt bí danh E-Shell


7

Trong tệp bí danh emacs của tôi nằm ở .emacs.d / eshell / bí danh , tôi có những điều sau đây:

alias mv mv -v $*

Bất cứ khi nào tôi thực hiện bí danh trong eshell, ví dụ : mv from_here.txt to_here.text, tôi nhận được lỗi:

mv: thiếu tập tin đích hoặc thư mục

Làm thế nào vấn đề bí danh này có thể được sửa chữa? Cảm ơn.

Câu trả lời:


5

Đầ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 -vthay thế. Sau đây tôi giả sử rằng trang hướng dẫn là đúng.

Có vẻ như eshell-maybe-replace-by-aliaslà 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 throwmẫu thay thế lệnh sẽ được thực thi. Trong eshell-parse-commandbí danh được thay thế nhưng các đối số bị mất.

Eshell của tôi hiển thị aliashành vi dự kiến nếu tôi thêm argsvào eshell-parse-commandthô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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.