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


151

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

我的问题是,使用git-diff时,我经常会看到以下内容:

-      else{ 
+      else{

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


4
如果反转颜色(交换前景色和背景色),将显示类似这样的空白。在许多终端中实现此目的的简单方法是用鼠标突出显示有问题的文本。当然,此技巧仅适用于彩色差异。
Phlarx

Answers:


172

您可能需要设置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 在他的回答中指出的那样,您应该投票赞成:),您可以通过用反转diff的含义来看到这些git diff -R。)

您可以在git config手册页中找到有关这些配置选项的更多文档。

如果您不想-R使用kludge,则可以使用diff手册页中WhiteSpace Error Highlight选项。

--ws-error-highlight =

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

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

要么

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

除了使用别名,我不知道一种永久将其打开并将其存储在config中的方法:

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

现在您可以使用:

git df <file>

以红色查看更改。

请注意,在Git 2.11(2016年第四季度)中,此别名可能替换为:

git config diff.wsErrorHighlight all

请参见上的文档git diffgit config


33
“一个可能引起混淆的原因是,在git diff的输出中,空格错误仅在引入的行中突出显示,而不是被删除的行中突出显示。” 究竟!而且没有办法显示删除的行吗?(嘿,这是差异:))
radarek

6
添加--global以在〜/ .gitconfig中设置
simlmx

17
@radarek:您可以使用反向选项:git diff -R
2013年

6
是否有此错误报告?如果没有,似乎应该有。
Ajedi32

3
这有效git config diff.wsErrorHighlight all。使用git config --global [...]使全球变化(即影响所有回购)。
费利佩·阿尔瓦雷斯

141

使用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),它表明整个文件已更改,但不显示如何更改。


4
当然,git diff | cat -A | less -S如果您不顾一切也可以这样做,但是除了回车以外,cat还将显示所有颜色高亮显示转义码。
保罗·惠特克

3
@Paul_Whittaker cat -A不能携带。在BSD cat上,没有这样的选项。请cat -vet改用。
7heo.tk 2015年

9

使用git diff --color | less -R。的-R使颜色控制代码变得人性化。

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

/[[:space:]]+$

vim顺便说一下,这个正则表达式也适用于。
何塞·奥尔本

这最后的想法less -R只是使得它更容易为我管ls --colorless
Menachem

0

我的版本git diff似乎已经做到了-我已经安装了git 1.7.4.1 color.ui = auto


12
我刚刚用git 1.7.5.1进行了测试,它当然不会突出显示被删除行中的尾随空格。
渗透者
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.