E-Shellエイリアスの設定


7

.emacs.d / eshell / aliasにある私のemacsエイリアスファイルには、次のものが含まれています。

alias mv mv -v $*

たとえばeshellでエイリアスを実行するとmv from_here.txt to_here.text、次のようなエラーが発生します。

mv:宛先ファイルまたはディレクトリがありません

このエイリアスの問題はどのように修正できますか?ありがとう。

回答:


5

最初にあなたのエイリアスに関するコメント。一方で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に送信され ます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.