fbardos
fbardos

Reputation: 540

List pairs of files when using vimdiff as git difftool

I'm using vimdiff as tool when comparing with git difftool.

I want to compare 2 commits with git difftool <commit1> <commit2>. Today, I have to exit every vimdiff view with :qa to get to the next file pair. Sometimes, the list of file pairs can be huge with this type of comparison. Then, I have to type :qa dozens of times (or :cq when done).

Is there a way to display all compared file pairs (with at least 1 change) in a QuickFix, Location List or something similar?

Then, it would be must easier to get an overview and to scroll through all changes and show only the diff of selected files.


Extract of my .gitconfig:

[diff]
    tool = vimdiff
[difftool]
    prompt = false
    # Be able to abort all diffs with `:cq` or `:cquit`
    trustExitCode = true

vimdiff --version:

VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Apr 18 2022 19:26:30)
Included patches: 1-3995

git --version:

git version 2.34.1

Upvotes: 4

Views: 610

Answers (2)

黄滨滨
黄滨滨

Reputation: 7

git difftool -d

you can

  1. j k moving to selected dir, presse enter to open dir
  2. move cursor to you want to open file
  3. pressed t to open file in new tab
  4. press gt or gT to go back dir buffer(netrw
  5. ctrl+w ctrl+w shift left buffer and rifht buffer
  6. do again 1 2 3
  7. now you have open 3 tab,but only 2 buffer(file) opend
  8. gt or gT to any tab that has display a file buffer
  9. :vsp to split vertical window
  10. :bn or :bp
  11. :windo diffthis

i code a vim scrip to expand netrw tree at all ,so i can search it , also can open diff easy...

Upvotes: 0

romainl
romainl

Reputation: 196926

The vimdiff in tool = vimdiff is not actually vimdiff. It's a script that doesn't really allow for what you want.

Sadly, the -d flag, as in $ git difftool -d, is not helpful as is. It opens two Netrw windows where you can effectively see which files have changes but the whole user experience is a lot more clunky than repeating :qa<CR>, even a hundred times:

vimdiff

IMO, it's a pain in the ass compared to the UX provided in GUI difftools:

filemerge

But, since you mentioned the quickfix, you might like git-jump, which lets you do:

$ git jump diff

git-jump

Which is pretty good for navigating from one change to another but doesn't really help solving the problem of seeing the actual diff.

Maybe a third-party plugin like this one could help but you would have to come up with a proper Git integration.

That sounds like a cool week-end project.

Upvotes: 5

Related Questions