#!/usr/bin/env bash repo_root="$(git rev-parse --show-toplevel)" if ! pushd "$repo_root" &> /dev/null; then echo "Repo doesn't exist!" exit 2 fi td="$(mktemp -d "vdiff.XXXXXXXX")" trap 'rm -rf '"$td" EXIT files="$(git diff --name-only "$@")" args=() vcmd="" for f in $files; do d="$(dirname "$td/$f")" rfn="$(basename "$f")" fn="$rfn._@HEAD" cfn="$rfn" mkdir -p "$d" # TODO: show at ref if provided git --no-pager show HEAD:"$f" > "$d/$fn" 2>/dev/null || \ echo "" > "$d/$fn" cp "$f" "$d/$cfn" 2>/dev/null || echo "" > "$d/$cfn" if [ -z "${args[0]}" ]; then args+=("$d/$fn -c") vcmd="vert diffsplit $d/$cfn" else vcmd="$vcmd | tabnew | e $d/$fn | vert diffsplit $d/$cfn" fi done remaps="nnoremap k :tabnext | nnoremap j :tabprev" nvim "${args[@]}" "$vcmd | tabnext | $remaps" if ! popd &> /dev/null; then echo "Could not return to original directory" exit 4 fi