关于代码格式化,我有点纯粹主义 : )。我经常会删除不必要的空格(只有空格的行,行末的空格等)。我甚至已经设置了vim来显示那种颜色为红色的行。
我的问题是,使用git-diff时,我经常看到这样的东西:
- else{
+ else{
即使我已经使用了git-diff彩色功能,但我仍然无法看到区别(在那种情况下,我删除了行末的1个空格)。有没有办法告诉git-diff将那个空格显示成红色?(例如与/\s+$/正则表达式匹配的那些)。
关于代码格式化,我有点纯粹主义 : )。我经常会删除不必要的空格(只有空格的行,行末的空格等)。我甚至已经设置了vim来显示那种颜色为红色的行。
我的问题是,使用git-diff时,我经常看到这样的东西:
- else{
+ else{
即使我已经使用了git-diff彩色功能,但我仍然无法看到区别(在那种情况下,我删除了行末的1个空格)。有没有办法告诉git-diff将那个空格显示成红色?(例如与/\s+$/正则表达式匹配的那些)。
从Git 2.11(2016年第四季度)开始,您可以执行以下操作:
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 config man page中找到有关这些配置选项的更多文档。如果您不想使用-R
把戏,您可以从diff man page中使用WhiteSpace Error Highlight选项。
--ws-error-highlight=
突出显示由color.diff.whitespace指定的颜色中指定行的空格错误。 是一个以逗号分隔的旧,新,上下文列表。 如果不给出此选项,则仅突出显示新行中的空格错误。 例如,--ws-error-highlight=new,old会在删除和添加的行上突出显示空格错误。 all可用作old,new,context的速记。
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
- blueyedgit config diff.wsErrorHighlight all
起作用了。使用 git config --global [...]
命令可以使更改全局生效(影响所有仓库)。 - Felipe Alvarez使用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
字符的(消失)。如果没有使用-R
(以及没有使用-w
等选项),它会显示整个文件已更改,但不会显示如何更改。
git diff | cat -A | less -S
命令,但是除了回车符外,cat
命令还会将文本中包含的任何颜色突出显示的转义代码原样显示。 - Paul Whittakercat -A
命令不是可移植的。在 BSD cat 中,没有这样的选项。请改用 cat -vet
命令。 - 7heo.tk如果只是想快速了解答案,可以直接运行以下命令:
git config --global diff.wsErrorHighlight all
然后git diff
也会在删除的行中突出显示末尾的空格。
请使用 git diff --color | less -R
命令。其中 -R
参数会让颜色控制码更容易阅读。
之后你可以使用 less
的正则表达式搜索功能,例如:
/[[:space:]]+$
vim
上也可以工作。 - Jose Albanless -R
这个最后的想法,让我更容易把 ls --color
通过 less
进行管道传输。 - Menachemgit config ....
[diff]
wsErrorHighlight = all
[color]
ui = auto
上述两个选项应该可以解决问题。我测试过的最早的git版本是1.7,但在此之后的任何版本中都应该适用。在较新的git版本中,“[color]”选项默认设置为“auto”。
我的版本的 git diff
似乎已经做到这一点 - 我有 git 1.7.4.1 并且设置了 color.ui = auto
。
git config diff.wsErrorHighlight all
,正如现在置顶的答案所解释的那样。 - sideshowbarkergit -c diff.wsErrorHighlight="all" diff
。 - Cole