目前,当启用选项时git diff
,--color
git 仅在添加的行中显示行尾,例如^M
和尾随空格。是否有可能让 git 在删除的行中也显示这些?
问问题
1988 次
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 回答