내가 알고 빔의 DIFF 모드 ( vimdiff
) 우리가 두 개 (또는 그 이상) 파일의 내용을 비교할 수 있습니다.
그러나 DiffMerge 및 유사한 도구와 같이 두 디렉토리를 재귀 적으로 병합하기 위해 디렉토리에서 여러 파일의 내용을 비교할 수 있습니까?
내가 알고 빔의 DIFF 모드 ( vimdiff
) 우리가 두 개 (또는 그 이상) 파일의 내용을 비교할 수 있습니다.
그러나 DiffMerge 및 유사한 도구와 같이 두 디렉토리를 재귀 적으로 병합하기 위해 디렉토리에서 여러 파일의 내용을 비교할 수 있습니까?
답변:
이 DirDiff.vim 플러그인 ( GitHub의 두 디렉토리를 재귀 적 DIFF 및 병합으로는).
두 디렉토리에서 재귀 diff를 수행하고 diff "창"을 생성합니다. 해당 창을 기반으로 Vim의 diff 모드에서 두 파일 열기, 파일 또는 디렉토리를 다른 파일로 재귀 적으로 복사하거나 소스 디렉토리에서 디렉토리 트리를 제거하는 등 다양한 diff 작업을 수행 할 수 있습니다.
용법:
:DirDiff <dir1> <dir2>
자세한 정보 / 도움말 : :help dirdiff
스크린 샷을 참조하십시오 :
또한보십시오:
재귀 적으로 디렉토리를 비교하고 병합 하시겠습니까? dedm 블로그에서
래퍼 스크립트를 사용하여 python
파일을 병합합니다 (아래 참조). 이것은 내 ~/.vim
디렉토리 등 을 병합하는 데 사용하는 단순화 된 버전입니다 .
파이썬 2와 3에서 작동합니다. CentOS 및 다른 배포판과 함께 제공되는 이전 버전의 Python에서는 아닐 것입니다.
이진 파일이나 파일이 동일한 경우와 같은 일부 검사는 빠르지 않습니다 (전체 파일을 읽습니다). 원하는 경우 제거 할 수 있습니다.
또한 디렉토리 중 하나에 만 a가 존재하는지 여부는보고하지 않습니다 ...
#!/usr/bin/env python
from __future__ import print_function
import hashlib, os, subprocess, sys
if len(sys.argv) < 3:
print('Usage: {} dir1 dir2'.format(sys.argv[0]))
sys.exit(1)
dir1 = os.path.realpath(sys.argv[1])
dir2 = os.path.realpath(sys.argv[2])
for root, dirs, files in os.walk(dir1):
for f in files:
f1 = '{}/{}'.format(root, f)
f2 = f1.replace(dir1, dir2, 1)
# Don't diff files over 1MiB
if os.stat(f1).st_size > 1048576 or os.stat(f2).st_size > 1048576: continue
# Check if files are the same; in which case a diff is useless
h1 = hashlib.sha256(open(f1, 'rb').read()).hexdigest()
h2 = hashlib.sha256(open(f2, 'rb').read()).hexdigest()
if h1 == h2: continue
# Don't diff binary files
if open(f1, 'rb').read().find(b'\000') >= 0: continue
subprocess.call(['vimdiff', f1, f2])
나는 한동안 같은 것을 원했다. 내가 찾은 최고의 솔루션은 vdwrap 을 사용 하는 것입니다. 그것이하는 모든 것 git difftool --dir-diff
입니다 vimdiff
. vim 플러그인이 필요하지 않습니다.
당신이해야 할 일은 git difftool
사용하도록 지시하는 것입니다 vdwrap
.
git config --global difftool.vdwrap.cmd '/full/path/vdwrap $LOCAL $REMOTE'
git config --global diff.tool vdwrap
다음에 git difftool을 사용하면 각 파일 쌍에 대해 별도의 Vim 탭이있는 Vim이 열립니다.
주의 사항은 Zsh 스크립트라는 것입니다. 그것을 bash 스크립트로 변환하는 것은 매우 간단해야하지만 나는 그 이동을주지 않았습니다.
이를위한 간단한 솔루션이 있습니다.
diff dir1 dir2 | vim -R -
쉘에서.변경된 파일에 대한 접기 및 나란히 비교를 추가합니다.