How to setup coloured git diff with vim as a pager

蓝咒 提交于 2019-12-03 13:27:52

问题


I am unable to configure git to follow my requests:

  1. use vim as a diff pager
  2. 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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!