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

时间:2011-03-10 09:15:20

标签: git colors diff whitespace

关于代码格式化,我有点纯粹:)。我经常删除不必要的空格(只有ws的行,行末尾的ws等)。我甚至设置了vim来显示那种颜色为红色的线条。

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

-      else{ 
+      else{

即使我有git-diff颜色,我也看不出差异(在特殊情况下,我在行尾删除了1个ws)。有没有办法告诉git-diff显示ws变成红色? (例如与/ \ s + $ / regexp匹配的那些)。

5 个答案:

答案 0 :(得分:153)

您可能需要设置color.diff.whitespace配置设置,例如用:

 git config color.diff.whitespace "red reverse"

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

如果要微调以红色突出显示的空白错误类型,则可以更改core.whitespace,但默认情况下会启用blank-at-eol,因此您可能不需要更改对于你提到的例子。

可能的混淆源是git diff的输出中,空格错误仅在引入的行中突出显示,而不是在删除的行中突出显示。 (更新:正如保罗·惠特克指出in his answer,你应该投票:),你可以通过用git diff -R扭转差异感来看到这些。)< / p>

您可以在git config man page

中找到有关这些配置选项的更多文档

如果您不想使用-R kludge,可以使用diff man page中的 WhiteSpace错误突出显示选项。

  

- WS-错误高亮=

     

突出显示由color.diff.whitespace指定的颜色指定的行上的空白错误。    是逗号   旧的,新的,上下文的分隔列表。如果没有给出此选项,   只突出显示新行中的空白错误。例如。   --ws-error-highlight = new,old突出显示已删除和添加的行上的空白错误。所有都可以作为一个简写   旧,新,上下文。

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

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

我不知道如何永久启用此功能并将其存储在配置中,而不是使用别名:

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

现在你可以使用:

git df <file>

以红色查看更改。

请注意with Git 2.11 (Q4 2016),此别名可能会替换为:

git config diff.wsErrorHighlight all

请参阅doc on git diffon git config

答案 1 :(得分:126)

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

(这假设您已经启用了空白高亮显示,根据Mark的回答中的颜色设置。此方法可以归功于Junio在http://git.661346.n2.nabble.com/Highlighting-whitespace-on-removal-with-git-diff-td5653205.html的帖子。)

例如,将文件从DOS行结尾转换为Unix时,git diff -R会清楚地显示出现在行尾的^M个字符(dis)。没有-R(也没有-w等),它会显示整个文件已更改,但未显示如何。

答案 2 :(得分:9)

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

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

/[[:space:]]+$

答案 3 :(得分:2)

对于懒惰的答案撇渣器,只需运行:

git config --global diff.wsErrorHighlight all

然后 git diff 也会突出显示删除行中的尾随空格。

答案 4 :(得分:1)

我的git diff版本似乎已经这样做了 - 我有git 1.7.4.1并设置了color.ui = auto