mergetools/vimdiff: add vimdiff1 merge tool variant

This adds yet another vimdiff/gvimdiff variant and presents conflicts as a two-way diff between 'LOCAL' and 'REMOTE'. 'MERGED' is not opened which deviates from the norm so usage text is echoed as a Vim message on startup that instructs the user with how to proceed and how to abort. Vimdiff is well-suited to two-way diffs so this is an option for a more simple, more streamlined conflict resolution. For example: it is difficult to communicate differences across more than two files using only syntax highlighting; default vimdiff commands to get and put changes between buffers do not need the user to manually specify a source or destination buffer when only using two buffers. Like other merge tools that directly compare 'LOCAL' with 'REMOTE', this tool will benefit when paired with the new `mergetool.hideResolved` setting. Signed-off-by: Seth House <seth@eseth.com> Tested-by: David Aguilar <davvid@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Seth House committed Feb 13, 2021 at 19:28 UTC 30bb8088afd4502acd2e166ddf7e4b071e53b86d
1 file changed +12 -1
mergetools/vimdiff
+12 -1
@@ -15,6 +15,17 @@ merge_cmd () {
15 "$LOCAL" "$MERGED" "$REMOTE"
16 fi
17 ;;
18 + *vimdiff1)
19 + "$merge_tool_path" -f -d \
20 + -c 'echon "Resolve conflicts leftward then save. Use :cq to abort."' \
21 + "$LOCAL" "$REMOTE"
22 + ret="$?"
23 + if test "$ret" -eq 0
24 + then
25 + cp -- "$LOCAL" "$MERGED"
26 + fi
27 + return "$ret"
28 + ;;
29 *vimdiff2)
30 "$merge_tool_path" -f -d -c 'wincmd l' \
31 "$LOCAL" "$MERGED" "$REMOTE"
@@ -52,7 +63,7 @@ exit_code_trustable () {
63
64 list_tool_variants () {
65 for prefix in '' g n; do
55 - for suffix in '' 2 3; do
66 + for suffix in '' 1 2 3; do
67 echo "${prefix}vimdiff${suffix}"
68 done
69 done