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

rad*_*rek 145 git diff whitespace colors

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

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

-      else{ 
+      else{
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*air 164

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

 git config color.diff.whitespace "red reverse"
Run Code Online (Sandbox Code Playgroud)

(我假设你已经拥有color.diffcolor.ui设置过,auto因为你说你git diff无论如何都会看到彩色补丁.)

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

可能的混淆源是,在输出中git diff,空格错误仅在引入的行中突出显示,而不是在被删除的行中突出显示.(更新:正如Paul Whittaker 在他的回答中指出的那样,你应该投票:),你可以通过扭转差异感来看到这些git diff -R.)

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

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

--ws误差高亮=

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

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>

要查看红色的变化.

请注意,使用Git 2.11(2016年第4季度),此别名可能会替换为:

git config diff.wsErrorHighlight all
Run Code Online (Sandbox Code Playgroud)

请参阅docgit diff and ongit config.

  • "可能的混淆来源是,在git diff的输出中,空格错误只会在引入的行中突出显示,而不会被删除." 究竟!还有没有办法显示删除线?(嘿,这是差异:)) (31认同)
  • @radarek:你可以使用反向选项:`git diff -R` (16认同)
  • 添加--global以在〜/ .gitconfig中设置 (6认同)
  • 有没有针对此的错误报告?如果没有,似乎应该有. (6认同)
  • 这工作`git config diff.wsErrorHighlight all`。使用`git config --global [...]`进行全局更改(即影响所有存储库)。 (3认同)

Pau*_*ker 133

使用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等),它表明整个文件已经改变,但没有显示如何.

  • 当然,你也可以做`git diff | 猫-A | 如果你是绝望的话,少-S`,但除了回车之外,`cat`还会显示任何突出显示转义码的颜色. (4认同)
  • @Paul_Whittaker`cat -A`不可携带.在BSD cat上,没有这样的选择.请改用`cat -vet`. (2认同)

use*_*062 13

对于懒惰的答案浏览器,只需运行:

git config --global diff.wsErrorHighlight all
Run Code Online (Sandbox Code Playgroud)

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


Kel*_*vin 9

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

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

/[[:space:]]+$
Run Code Online (Sandbox Code Playgroud)