실험 ediff-directories
중이지만 올바르게 사용하고 있는지 확실하지 않습니다.
문서 에서 두 개의 디렉토리를 제공 ediff-directories
하면 ==
Emacs를 누르면 재귀 적으로 비교 한다는 내용을 읽었습니다 .
그러나 키를 누르면 명령을 실행하는 수준에서 기호가 ==
있는 폴더 만 =
표시됩니다 (두 폴더의 내용이 동일 함을 의미 함). =
폴더 계층에서 더 깊은 수준의 표시 가있는 폴더를 보려면 ==
각 수준에서 명령 을 다시 실행해야 합니다.
emacs에게 directory difference buffer
(키보드 명령을 통해 액세스 할 수있는)의 모든 차이점을 볼 수 있도록 잎까지 반복적으로 가도록 지시하려면 D
어떻게해야합니까?
누구든지 ediff-directories
(공식 문서 이외의) 사용 방법에 대한 자습서를 알고 있다면 매우 관심이 있습니다.
또한 세션 그룹 (한 레벨의 폴더 비교)을 종료하고 싶지만 더 깊은 수준의 세션을 열려면 q
(이 세션 그룹을 종료하십시오)을 누르면 Emacs는 메시지와 함께 불평합니다.
이 세션 그룹에는 활성 세션이 있습니다.
하위 세션을 하나씩 종료하지 않고 세션 그룹을 종료하려면 어떻게해야합니까?
답변
나는 사용 M-x dired-compare-directories
했지만 , 당신이 묘사 한 상황에서 더 잘 봉사 할 수있는 EdiffTrees 도 있습니다.
답변
나는 또한이 기능이 필요했고 다음을 생각해 냈습니다. 함수ediff-directories-recursive
은 작동 ediff-directories
하지만 하위 디렉토리로 반복됩니다.
그 뒤에 숨어있는 마술은 전화하기 전에 내장형을 directory-files
자체 제작으로 일시적으로 대체 directory-files-recursive
하는 것 ediff-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))))))
답변
이 ztree
재귀 디렉토리 트리 비교를 지원 Melpa에서 사용할 패키지 : M-x ztree-diff
GNU를 사용하여diff
해당 파일을 비교하는 유틸리티.
use-package
그런 다음 ztree
패키지 를 설치 및 구성하는 데 사용하는 경우 다음에 추가하십시오 .emacs
.
;; ** recursive directory tree comparison: M-x ztree-diff
(use-package ztree
:ensure t) ; needs GNU diff utility