Emacsのディレクトリ比較

Emacsのディレクトリ比較

試してみますが、ediff-directories正しく使用しているかどうかわかりません。

私は読んだ文書2つのディレクトリを指定してEmacsを押すと、再帰的ediff-directories==比較されます。

ただし、このボタンを押すと、コマンドが実行されたレベルのシンボルを含むフォルダのみがインポート===れます(両方のフォルダに同じ内容があります)。フォルダ階層でより深いレベルのフラグを持つフォルダを確認するには、=各レベルでコマンドを再実行する必要があります。==

Emacsに葉のすべての違いを見るために葉まで繰り返すように指示する方法directory difference buffer(キーボードコマンドを介してアクセス可能)D

ediff-directories公式チュートリアル以外にチュートリアルの使い方を知っている人がいれば文書)、本当に興味があると思います。


また、セッションを終了したいが(特定のレベルのフォルダを比較)、より深いセッションが開いている場合q(このセッションの終了)をクリックすると、Emacsは次のメッセージを表示します。

この会話グループにはアクティブなセッションがあります。 ---終了できません。

サブセッションを1つずつ終了せずに会話グループを終了するには?

答え1

持つztreeMelpaが提供するパッケージは、再帰的なディレクトリツリー比較をサポートしています。M-x ztree-diffGNUdiffユーティリティを使用してファイルを比較します。

使用する場合use-packageztreeその後、パッケージをインストールして構成するには、以下を追加します.emacs

;; ** recursive directory tree comparison: M-x ztree-diff
(use-package ztree
  :ensure t) ; needs GNU diff utility

答え2

試してみましたが、M-x dired-compare-directoriesまだ残っています。edifツリー、あなたが説明する状況でより良いサービスを提供することができます。

答え3

私にもこの機能が必要で、次のことを思い出しました。この関数はediff-directories-recursive同様に機能しますediff-directoriesが、サブディレクトリで繰り返されます。

その背後にある魔法は、組み込まれたものを呼び出す前に一時的に自家製とdirectory-files交換することです。directory-files-recursiveediff-directories

(eval
 (let ((directory-files-original (symbol-function 'directory-files)))
   `(defun directory-files-recursive (directory &optional full match nosort)
      "Like `directory-files' but recurses into subdirectories. Does not follow symbolic links."
      (let* ((prefix (or (and full "") directory))
         dirs
         files)
    (mapc (lambda (p)
        (let ((fullname (if full p (concat prefix "/" p))))
          (when (and (file-directory-p fullname)
                 (null (or (string-match "\\(^\\|/\\).$" p)
                       (string-match "\\(^\\|/\\)..$" p)
                       (file-symlink-p fullname))))
            (setq dirs (cons p dirs)))))
          (funcall ,directory-files-original directory full nil nosort))
    (setq dirs (nreverse dirs))
    (mapc (lambda (p)
        (when (null (file-directory-p (if full p (concat prefix "/" p))))
          (setq files (cons p files))))
          (funcall ,directory-files-original directory full match nosort))
    (setq files (nreverse files))
    (mapc (lambda (d)
        (setq files
              (append files
                  (if full
                  (apply 'directory-files-recursive (list d full match nosort))
                (mapcar (lambda (n)
                      (concat d "/" n))
                    (apply 'directory-files-recursive (list (concat prefix "/" d) full match nosort)))))))
          dirs)
    files))))

(eval
 `(defun ediff-directories-recursive (dir1 dir2 regexp)
    "Like `ediff-directories' but recurses into sub-directories. Does not follow symbolic links."
    ,(interactive-form (symbol-function 'ediff-directories))
    (let ((directory-files-original (symbol-function 'directory-files)))
      (unwind-protect
      (progn
        (fset 'directory-files (symbol-function 'directory-files-recursive))
        (ediff-directories dir1 dir2 regexp)
        (fset 'directory-files directory-files-original))))))

答え4

ztree上記の推奨事項に追加したかったです。 ztreeは素晴らしいです。フェンスにいる方のために、ここにスクリーンショットがあります。ここに画像の説明を入力してください。

関連情報