vimdiff
두 디렉터리를 재귀적으로 비교하고 차이점이 발견되면 실행하는 스크립트를 작성하고 있습니다 .
#!/bin/bash
dir1=${1%/}
dir2=${2%/}
find "$dir1/" -type f -not -path "$dir1/.git/*" | while IFS= read line; do
file1="$line"
file2=${line/$dir1/$dir2}
isdiff=$(diff -q "$file1" "$file2")
if [ -n "$isdiff" ]; then
vimdiff "$file1" "$file2"
fi
done
vim이 "입력이 터미널에서 오지 않았습니다."라는 경고를 표시하기 때문에 작동하지 않습니다. -
인수를 제공해야 한다는 것은 약간 까다롭지만 어느 정도 작업 중입니다.
#!/bin/bash
dir1=${1%/}
dir2=${2%/}
find "$dir1/" -type f -not -path "$dir1/.git/*" | while IFS= read line; do
file1="$line"
file2=${line/$dir1/$dir2}
isdiff=$(diff -q "$file1" "$file2")
if [ -n "$isdiff" ]; then
cat "$file1" | vim - -c ":vnew $file2 | windo diffthis"
fi
done
문제는 diff 창 오른쪽에 새 파일이 있다는 것입니다. dir1의 원본 파일과 dir2의 원본 파일을 비교하고 싶습니다. 어떻게 해야 하나요?
답변1
vim
그래서 vimdiff
추측한 것 같다.표준 입력는단말기. 스크립트에서 다음을 수행하여 이 문제를 해결할 수 있습니다.
</dev/tty vimdiff "$file1" "$file2"
답변2
다음과 같이 시도해 보세요.
#! /bin/sh
[ $# -eq 2 -a -d "$1" -a -d "$2" ] || exit 1
find "$1" -name .git -prune -o \( -type f -printf '%P\n' \) | \
while IFS= read -r f; do
if [ -f "$2/$f" ] && ! diff -q -- "$1/$f" "$2/$f" >/dev/null; then
vimdiff -- "$1/$f" "$2/$f" </dev/tty
fi
done
위의 내용은 GNU find(1)
( -printf
작동용)를 가정한 것입니다.
답변3
X에서 실행 중인 경우 몇 가지 다른 트릭을 사용할 수 있습니다. vim 사본이 gui로 컴파일된 경우 -gf
vim에 추가하는 것이 도움이 될 수 있습니다. g 옵션은 GUI를 활성화하고 f 옵션은 GUI를 전경에 유지합니다. 나는 또한 자신의 xterm에서 vimdiff를 시작하는 방법도 알고 있습니다 xterm -e vimdiff "$@"
.
답변4
어떻게에 대한:
vim -c ":e $file1 | vnew $file2 | windo diffthis"
편집을 위해 열리고 $file1
두 번째 파일이 열립니다. 표준 입력에서는 아무것도 읽을 수 없으므로 이름이 지정되지 않은 파일이 없습니다.