vimdiff but each file on a different tab
Go to file
Balakrishnan Balasubramanian 5e2943624a Use shlex to split custom vim command
This allows to include spaces in vim command
Add example to change default diff algorithm
Move to first line on each file

Backport from da5e24260
2023-03-06 11:01:40 -05:00
LICENSE Add README and LICENSE 2022-12-07 18:04:27 -05:00
README.md Use shlex to split custom vim command 2023-03-06 11:01:40 -05:00
vimtabdiff.py Use shlex to split custom vim command 2023-03-06 11:01:40 -05:00

Do you use git difftool to review changes before making a commit? The problem with that is that you get to see the diff of one file at a time. You can't easily stop it after few files and you can't go back to a previous file. vimtabdiff.py loads all the files with diffs, one in each vim tab page. You can move around any file and edit the diffs easily.

Install

    mkdir -p ~/bin

    # for python version >= 3.10
    curl -o ~/bin/vimtabdiff.py "https://raw.githubusercontent.com/balki/vimtabdiff/master/vimtabdiff.py"

    # for python version < 3.10
    curl -o ~/bin/vimtabdiff.py "https://raw.githubusercontent.com/balki/vimtabdiff/py38/vimtabdiff.py"

    chmod +x ~/bin/vimtabdiff.py

You may need to add ~/bin to your PATH variable if not already done. See here for help. 👍 this issue for pip install support

Screenshot

image

Usage

    usage: vimtabdiff.py [-h] [--vim VIM] pathA pathB

    Show diff of files from two directories in vim tabs

    positional arguments:
      pathA
      pathB

    options:
      -h, --help  show this help message and exit
      --vim VIM   vim command to run

Git difftool

Setup

    git config --global difftool.vimtabdiff.cmd 'vimtabdiff.py $LOCAL $REMOTE'
    git config --global alias.dt 'difftool --tool vimtabdiff --dir-diff'

Usage

    git dt <any git diff revision expression> # see `man gitrevisions`
    git dt           # Unstaged changes
    git dt --staged  # Staged changes
    git dt HEAD~1    # Last commit
    git di v1.0 v2.0 # diff between two tags

Using custom vim command

Using clean vim without reading vimrc

    git config --global difftool.vimtabdiff.cmd 'vimtabdiff.py --vim "vim --clean" $LOCAL $REMOTE'

Git config file (~/.gitconfig) should look like this

    [alias]
            ...
            dt = difftool --tool vimtabdiff --dir-diff
    [difftool "vimtabdiff"]
            cmd = vimtabdiff.py --vim \"vim --clean\" $LOCAL $REMOTE

Using better diff algorithm

    git config --global difftool.vimtabdiff.cmd 'vimtabdiff.py --vim "vim +\"set diffopt+=algorithm:patience\"" $LOCAL $REMOTE'

Note: Not tested in non-linux OS. But I guess it should work fine. Pull requests welcome if found any issues.

Similar

https://gist.github.com/Osse/4709787