【问题标题】:How to setup coloured git diff with vim as a pager如何使用 vim 作为寻呼机设置彩色 git diff
【发布时间】:2013-06-09 19:42:41
【问题描述】:

我无法配置 git 来满足我的要求:

  1. 使用 vim 作为差异分页器
  2. 在交互模式下添加文件时保留差异颜色

我的~/.gitconfig 设置:

[color]
    ui = auto
    # diff = false

[pager]
    diff = vim -

使用此配置,git add --interactive 的交互模式会按预期生成彩色输出:

这样做的缺点是 vim 中的 diff 已损坏。查看git diff的输出:

当使用git diff | vim - 时,颜色还可以,但我懒得输入完整的命令。是否有任何已知的方法可以在这两种情况下保留颜色?

【问题讨论】:

标签: git vim diff


【解决方案1】:

您需要在加载文件后安装AnsiEsc plugin 并运行:AnsiEsc。您可以将寻呼机设置为vim -c AnsiEsc - 来执行此操作。

或者,使用 vim 自己的高亮:使用相同的方法 (-c command) 运行

%sm/\e.\{-}m//g
set ft=diff

    diff = "vim -c '%sm/\\e.\\{-}m//g' -c 'set ft=diff' -"

【讨论】:

  • 完美,谢谢!我使用了一个稍微改进的版本,它在替换后将光标设置在缓冲区的顶部。它也忽略空差异: diff = "vim -c '%sm/\\e.\\{-}m//ge' -c 'set ft=diff' -c 'normal gg' -"
  • 我添加了 -c 'setlocal buftype=nofile' 以防止 vim 在尝试 :q 时抱怨未保存的更改
【解决方案2】:

这里有两种选择。

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.

常规的 Git 差异,但具有颜色高度。

$ git config --global color.ui true

[color]
    ui = true

现在,你有一个奇怪的组合。您当然可以同时使用两者,但 pager 会搞砸事情。
你得到 ^[32m 等的原因是你试图在 Vim 中读取 shell 颜色。这行不通。

【讨论】:

    【解决方案3】:

    试试这些设置:

    git config --global diff.tool vimdiff
    git config --global merge.tool vimdiff
    
    git config --global difftool.prompt false
    

    【讨论】:

      猜你喜欢
      • 2011-01-12
      • 1970-01-01
      • 2017-07-30
      • 2013-02-14
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多