问题
I am unable to configure git to follow my requests:
- use vim as a diff pager
- keep colours for diff when adding files in interactive mode
My ~/.gitconfig
setup:
[color]
ui = auto
# diff = false
[pager]
diff = vim -
With this configuration the interactive mode for git add --interactive
produces coloured output as expected:

The downside of this is that diff in vim is corrupted. See the output of git diff
:

When using git diff | vim -
the colours are OK but I'm too lazy to type the full command. Is there any known method that preserves colours in both cases?
回答1:
You need to install AnsiEsc plugin and run :AnsiEsc
just after loading file. You can set pager to vim -c AnsiEsc -
to do this.
Alternatively, use vim own highlighting: using the same method (-c command
) run
%sm/\e.\{-}m//g
set ft=diff
:
diff = "vim -c '%sm/\\e.\\{-}m//g' -c 'set ft=diff' -"
回答2:
You have two alternatives here.
Use Vimdiff as a difftool
$ git config --global diff.tool vimdiff
$ git config --global difftool.prompt false
$ git config --global alias.d difftool
[diff]
tool = vimdiff
[difftool]
prompt = false
[alias]
d = difftool # Not needed, just a convenience. $ git difftool, still works.
Regular Git diff, but with color highlithing.
$ git config --global color.ui true
[color]
ui = true
Right now, you have a weird mix. You can of course use both, but the pager
is messing up things.
The reason you get ^[32m
etc is because you're trying to read shell colors in Vim. This doesn't work.
回答3:
Try these settings:
git config --global diff.tool vimdiff
git config --global merge.tool vimdiff
git config --global difftool.prompt false
来源:https://stackoverflow.com/questions/17013462/how-to-setup-coloured-git-diff-with-vim-as-a-pager