Balakrishnan Balasubramanian
5e2943624a
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
87 lines
2.5 KiB
Markdown
87 lines
2.5 KiB
Markdown
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
|
|
|
|
```bash
|
|
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](https://wiki.archlinux.org/title/Environment_variables#Per_user) for help.
|
|
👍 this [issue](https://github.com/balki/vimtabdiff/issues/1) for `pip install` support
|
|
|
|
|
|
# Screenshot
|
|
![image](https://user-images.githubusercontent.com/189196/206880555-c71b472c-144c-4c82-a4ab-f8a4fd36f7a5.png)
|
|
|
|
# Usage
|
|
```help
|
|
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
|
|
```bash
|
|
git config --global difftool.vimtabdiff.cmd 'vimtabdiff.py $LOCAL $REMOTE'
|
|
git config --global alias.dt 'difftool --tool vimtabdiff --dir-diff'
|
|
```
|
|
|
|
## Usage
|
|
|
|
```bash
|
|
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`
|
|
```bash
|
|
git config --global difftool.vimtabdiff.cmd 'vimtabdiff.py --vim "vim --clean" $LOCAL $REMOTE'
|
|
```
|
|
|
|
Git config file (`~/.gitconfig`) should look like this
|
|
|
|
```toml
|
|
[alias]
|
|
...
|
|
dt = difftool --tool vimtabdiff --dir-diff
|
|
[difftool "vimtabdiff"]
|
|
cmd = vimtabdiff.py --vim \"vim --clean\" $LOCAL $REMOTE
|
|
```
|
|
Using better diff algorithm
|
|
|
|
```bash
|
|
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
|