5

目前,当启用选项时git diff--colorgit 仅在添加的行中显示行尾,例如^M和尾随空格。是否有可能让 git 在删除的行中也显示这些?

4

2 回答 2

1

这不是您正在寻找的内容,但如果您使用 Vim,您可以将其添加到您的 vimrc 文件中,它会显示空白。然后,如果您使用 vimdiff 或在 Vim 中使用 git diff(我推荐名为 Fugitive 的插件),它将显示空白。

这是您必须添加到 vimrc 的内容:

highlight RedundantWhitespace ctermbg=red guibg=red
highlight ExtraWhitespace ctermbg=red guibg=red
match RedundantWhitespace /[^\t]\zs\t\+/
match ExtraWhitespace /\s\+$\| \+\ze\t/

您可以使用以下内容自动删除空格:

autocmd BufWritePre * :%s/\s\+$//e
于 2014-07-31T08:57:40.100 回答
1

这不是最漂亮的解决方法,但您可以创建一个 shell 别名以使其可以忍受。可悲的是,如果您在输出中混合使用制表符和空格,则它不会在终端中正确呈现。这似乎是 Gnome 终端的一个问题(您会注意到差异中添加的行也有相同的行为)。

这是你想要的命令:

git diff --color | \
sed 's/^\(\x1B\[31m-.*[^ \t]\)\([ \t]\+\)\(\x1B\[m\)$/\1\x1B[41m\2\3/g'

或者更方便的是,将其添加到您的.bashrc

alias coloreol="sed 's/^\(\x1B\[31m-.*[^ \t]\)\([ \t]\+\)\(\x1B\[m\)$/\1\x1B[41m\2\3/g'"

这样您就可以git diff --color|coloreol在 shell 提示符下键入。

本质上,它匹配 ANSI 红色代码,一个减号后跟任何非空白字符。然后它匹配一个或多个空白字符,直到遇到 ANSI 重置标志。Sed 将在空格和行尾之间插入一个 ANSI 红色反转代码。

我已经为您分解了 reg ex,以便您可以根据需要对其进行修改:

第一部分,分为三组:

Match the start of the line and ANSI code for red: 
   ^\(\x1B\[31m
          -.*[^ \t]  <-- Followed by the hyphen, anything, then a non-whitespace character
    \)
 Now match one or more space or tab characters for group 2.
 \([ \t]\+\)
 Finally the ANSI reset code and EOL for group 3
 \(\x1B\[m\)$

然后我们将其替换为:

 \1  \x1B[41m  \2  \3

也就是说,第一个匹配项是反转红色的 ANSI 代码 ( \x1B[41m),然后是空格和 ANSI 重置。

于 2014-07-31T07:51:12.337 回答