git diff 显示颜色不正确

50 osx colors pager git

为了从所有 git 命令获得彩色输出,我设置了以下内容:

git config --global color.ui true
Run Code Online (Sandbox Code Playgroud)

但是,这会产生这样的输出git diffgit log

git diff 截图

而像git status显示正常这样的命令

git 状态截图

为什么仅在某些命令中无法识别转义的颜色代码,我该如何解决?

xterm-256color在 OS X 10.8.2 和 zsh 上使用 iTerm 2(终端类型)作为我的外壳

zsh --version
zsh 5.0.0 (x86_64-apple-darwin12.0.0)

git --version                                                                                                                      
git version 1.7.9.6 (Apple Git-31.1)
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 69

您看到的转义序列告诉终端更改显示的颜色,转义字符显示为ESC,而所需的行为是转义序列具有其预期效果。

默认情况下,诸如git diff和 之类的命令将git log其输出传送寻呼机less。Git 试图告诉less允许控制字符具有其控制效果,但这对您不起作用。

如果less是您的寻呼机,但您将环境变量LESS设置为不包含-ror的值,则-Rgit 无法告诉less显示颜色。它通常通过LESS=-FRSX,但如果LESS已经在环境中设置则不会。修复方法是显式传递-R选项以less在 git 调用时告诉显示颜色:

git config --global core.pager 'less -R'
Run Code Online (Sandbox Code Playgroud)

如果less不是您的寻呼机,请切换到less或弄清楚如何使您的寻呼机显示颜色。

如果你不想让git去显示颜色时,它调用寻呼机,设置color.uiauto代替true

  • 谢谢!我没有注意到 FreeBSD 中默认的 `~/.profile` 有 `PAGER=more; 出口分页器` (5认同)