将文件与脚本中的 vimdiff 进行比较

Big*_*uge 5 bash vim shell-script vimdiff

我正在编写一个脚本来递归比较两个目录并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
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为 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
Run Code Online (Sandbox Code Playgroud)

问题是差异窗口的右侧是一个新文件。我想将 dir1 中的原始文件与 dir2 中的原始文件进行比较。我怎样才能做到这一点?

Flo*_*elf 5

vim因此vimdiff似乎假设stdin是一个tty。您可以通过在脚本中执行以下操作来解决此问题:

</dev/tty vimdiff "$file1" "$file2"
Run Code Online (Sandbox Code Playgroud)