사용해 보고 있지만 ediff-directories
올바르게 사용하고 있는지 잘 모르겠습니다.
나는 읽었다문서두 개의 디렉토리를 제공하고 Emacs를 ediff-directories
누르면 ==
재귀적으로 비교할 것입니다.
그러나 이 버튼을 누르면 명령이 실행된 수준의 기호가 있는 폴더 ==
만 =
가져옵니다(두 폴더 모두 동일한 내용을 가짐). 폴더 계층 구조에서 더 깊은 수준의 플래그가 있는 폴더를 확인하려면 =
각 수준에서 명령을 다시 실행해야 합니다.==
Emacs에게 나뭇잎 의 모든 차이점을 볼 수 있도록 리프까지 반복하도록 어떻게 지시합니까 directory difference buffer
(키보드 명령을 통해 액세스 가능 )?D
ediff-directories
공식 튜토리얼 외에 튜토리얼 사용법을 아는 사람이 있다면문서), 정말 관심이 많을 것 같아요.
또한 세션을 종료하고 싶지만(특정 수준의 폴더 비교) 더 깊은 세션이 열려 있는 경우 q
(이 세션 종료)를 누르면 Emacs는 다음 메시지를 표시합니다.
이 대화 그룹에는 활성 세션이 있습니다. --- 종료할 수 없습니다.
하위 세션을 하나씩 종료하지 않고 대화 그룹을 종료하는 방법은 무엇입니까?
답변1
가지다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
답변2
사용해봤지만 M-x dired-compare-directories
아직 남아있어요edif 트리, 귀하가 설명하는 상황에서 더 나은 서비스를 제공할 수 있습니다.
답변3
나에게도 이 기능이 필요해서 다음을 생각해 냈습니다. 이 함수는 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))))))