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
2番目のファイルが開きます。標準入力では何も読み取れないため、名前のないファイルはありません。