Compare commits

...

3 Commits

Author SHA1 Message Date
e26e40413f Change download url to branch
Backport from 065ef47b2
2023-03-06 11:04:49 -05:00
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
32e186695a Keep new changes on right
Saves and restores splitright option
Backported from 512df2948
2023-03-06 10:53:14 -05:00
2 changed files with 44 additions and 11 deletions

View File

@ -1,3 +1,27 @@
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/br-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
@ -34,6 +58,7 @@
## Using custom vim command
Using clean vim without reading `vimrc`
```bash
git config --global difftool.vimtabdiff.cmd 'vimtabdiff.py --vim "vim --clean" $LOCAL $REMOTE'
```
@ -47,16 +72,14 @@ Git config file (`~/.gitconfig`) should look like this
[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'
# Known issues
```
1. If your path to custom vim has space, it does not work. i.e. Following does *not* work
```bash
git config --global difftool.vimtabdiff.cmd 'vimtabdiff.py --vim "/home/foo/my files/bin/vim" $LOCAL $REMOTE'
```
2. Not tested in non-linux OS. Pull requests welcome if found any issues.
*Note:* Not tested in non-linux OS. But I guess it should work fine. Pull requests welcome if found any issues.
# Similar

View File

@ -6,7 +6,7 @@ import pathlib
import itertools
import tempfile
import subprocess
import shlex
def star(f):
""" see https://stackoverflow.com/q/21892989 """
@ -15,7 +15,8 @@ def star(f):
def parse_args():
parser = argparse.ArgumentParser(
description="Show diff of files from two directories in vim tabs")
description="Show diff of files from two directories in vim tabs",
epilog="See https://github.com/balki/vimtabdiff for more info")
parser.add_argument("pathA")
parser.add_argument("pathB")
parser.add_argument("--vim", help="vim command to run", default="vim")
@ -67,18 +68,27 @@ def main():
args = parse_args()
vimCmdFile = tempfile.NamedTemporaryFile(mode='w', delete=False)
with vimCmdFile:
cmds = f"""
let s:spr = &splitright
set splitright
"""
print(cmds, file=vimCmdFile)
for a, b in get_file_pairs(args.pathA, args.pathB):
aPath = a.resolve() if a else os.devnull
bPath = b.resolve() if b else os.devnull
print(
f"tabedit {aPath} | diffthis | vsp {bPath} | diffthis | diffupdate",
f"tabedit {aPath} | vsp {bPath}",
file=vimCmdFile)
cmds = f"""
let &splitright = s:spr
tabdo windo :1
tabdo windo diffthis
tabdo windo diffupdate
tabfirst | tabclose
call delete("{vimCmdFile.name}")
"""
print(cmds, file=vimCmdFile)
subprocess.run(args.vim.split() + ["-S", vimCmdFile.name])
subprocess.run(shlex.split(args.vim) + ["-S", vimCmdFile.name])
if __name__ == '__main__':