在 git-diff 的输出中着色空白

关于代码格式,我是一个纯粹主义者:)。我经常删除不必要的空白(只有 ws 的行,行尾的 ws 等)。我甚至将 vim 设置为将这种线条染成红色。

我的问题是,使用 git-diff 时,我经常看到这样的东西:

-      else{
+      else{

即使我有 git-diff 颜色,我也看不出区别(在这种特殊情况下,我删除了行尾的1个 ws)。有什么方法可以告诉 git-diff 显示颜色为红色?(例如那些与/s + $/regexp 匹配的)。

64403 次浏览

我的 git diff版本似乎已经做到了这一点-我已经设置了 git1.7.4.1和 color.ui = auto

使用 Git 2.11(2016年第4季)及之后,你可以:

git config diff.wsErrorHighlight all

参见 医生在 git diff频道git config频道


对于更老的版本,您可以设置 color.diff.whitespace配置设置,例如:

git config color.diff.whitespace "red reverse"

(我假设你已经将 color.diff或者 color.ui设置为 auto,因为你说你无论如何都会看到来自 git diff的彩色补丁。)

如果您想要调整用红色突出显示的空白错误的类型,那么您可以修改 core.whitespace,但是 blank-at-eol在默认情况下是启用的,因此您可能不需要为您提到的示例修改它。

造成混淆的一个可能原因是,在 git diff的输出中,只在引入的行中突出显示空格错误,而不是在删除的行中突出显示空格错误。(正如 Paul Whittaker 指出的 在他的回答中,你应该投赞成票:) ,你可以通过将差异的意义与 git diff -R相反来看到这些。)

您可以在 Git 配置手册页中找到关于这些配置选项的更多文档

如果你不想使用 -R组件,你可以使用 Diff 手册中的 空白错误高亮选项。

—— ws-error-highed =

< p > 突出显示由 color. ff.whitespace 指定的颜色所指定的行上的空白错误。 是个逗号 旧的、新的、上下文的分隔列表。如果没有给出此选项, 只突出显示新行中的空格错误。 —— ws-error- 更新,在已删除和添加的行中都有新的、老的高亮显示空白。所有这些都可以用作 旧的,新的,背景

git diff --ws-error-highlight=new,old <file>

或者

git diff --ws-error-highlight=all <file>

对于2.11以上的版本,除了使用别名之外,没有办法永久打开它并将其存储在配置中:

git config alias.df 'diff --ws-error-highlight=all'

现在你可以使用:

git df <file>

看到红色的变化。

使用 git diff -R将删除的行转换为添加的行。然后将突出显示尾部的空格。

(这里假设您已经启用了空格高亮显示,根据 Mark 的答案中的颜色设置。这个方法的功劳归于朱尼奥在 http://git.661346.n2.nabble.com/Highlighting-whitespace-on-removal-with-git-diff-td5653205.html的职位。)

例如,当将文件从 DOS 行结束转换到 Unix 时,git diff -R清楚地向我显示出现在行结束处的 ^M字符(dis)。如果没有 -R(也没有 -w等) ,它会显示整个文件已经更改,但是不会显示如何更改。

使用 git diff --color | less -R-R使色彩控制代码人性化。

然后可以使用 less的正则表达式搜索,例如。

/[[:space:]]+$

对于那些懒得回答问题的人来说,只要跑就行了:

git config --global diff.wsErrorHighlight all

然后,git diff也将突出显示已删除行中的尾随空白。