小编典典

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

all

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

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

-      else{ 
+      else{

即使我有 git-diff 彩色,我也看不出区别(在那种特殊情况下,我在行尾删除了 1 ws)。有没有办法告诉 git-diff 显示 ws
着色为红色?(例如与 /\s+$/ 正则表达式匹配的那些)。


阅读 73

收藏
2022-07-28

共1个答案

小编典典

使用Git 2.11(2016
年第四季度)
及之后,您可以执行以下操作:

git config diff.wsErrorHighlight all

请参阅doc ongit diffongit config


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

git config color.diff.whitespace "red reverse"

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

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

一个可能的混淆来源是,在 的输出中git diff,空白错误仅在引入的行中突出显示,而不是在被删除的行中突出显示。( 更新:正如 Paul
Whittaker
在他的回答中指出的那样,你应该投票赞成:),你可以通过用git diff -R.

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

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

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

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

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

--ws-error-highlight=

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

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>

以红色查看变化。

2022-07-28