当我有一个差异时,我如何给它上色,使它看起来更好?

我想它的命令行,所以请没有GUI解决方案。


当前回答

当yum install colordiff或apt-get install colordiff由于一些超出你直接控制的疯狂限制而不是一个选项时,或者你只是感觉疯狂,你可以用一行sed来重新发明轮子:

sed 's/^-/\x1b[41m-/;s/^+/\x1b[42m+/;s/^@/\x1b[34m@/;s/$/\x1b[0m/'

把它扔到一个shell脚本中,并通过它管道统一的差异输出。

它使大块标记为蓝色,突出显示新/旧文件名和添加/删除的行,分别为绿色和红色背景它将使尾随空格2的变化比colordiff更明显。


顺便说一句,突出显示与修改行相同的文件名的原因是,要正确区分文件名和修改行,需要正确解析diff格式,这不是用正则表达式可以解决的问题。突出显示它们在视觉上“足够好”,使问题变得微不足道。也就是说,有一些有趣的微妙之处。

2但不是尾随制表符。显然制表符没有得到它们的背景设置,至少在我的xterm中是这样。它确实使制表符与空格的变化脱颖而出。

其他回答

diff的手册页没有建议从内部进行着色的解决方案。请考虑使用色差。它是diff的包装器,产生与diff相同的输出,除了它使用彩色语法高亮显示来增强输出以增加可读性:

diff old new | colordiff

或者是:

colordiff old new

安装:

Ubuntu/Debian: sudo apt-get install colordiff OS X: brew install colordiff或port install colordiff

当yum install colordiff或apt-get install colordiff由于一些超出你直接控制的疯狂限制而不是一个选项时,或者你只是感觉疯狂,你可以用一行sed来重新发明轮子:

sed 's/^-/\x1b[41m-/;s/^+/\x1b[42m+/;s/^@/\x1b[34m@/;s/$/\x1b[0m/'

把它扔到一个shell脚本中,并通过它管道统一的差异输出。

它使大块标记为蓝色,突出显示新/旧文件名和添加/删除的行,分别为绿色和红色背景它将使尾随空格2的变化比colordiff更明显。


顺便说一句,突出显示与修改行相同的文件名的原因是,要正确区分文件名和修改行,需要正确解析diff格式,这不是用正则表达式可以解决的问题。突出显示它们在视觉上“足够好”,使问题变得微不足道。也就是说,有一些有趣的微妙之处。

2但不是尾随制表符。显然制表符没有得到它们的背景设置,至少在我的xterm中是这样。它确实使制表符与空格的变化脱颖而出。

对我来说,我找到了一些解决方案:这是一个有效的解决方案

@echo off
Title a game for YouTube
explorer "https://thepythoncoding.blogspot.com/2020/11/how-to-echo-with-different-colors-in.html"
SETLOCAL EnableDelayedExpansion
for /F "tokens=1,2 delims=#" %%a in ('"prompt #$H#$E# & echo on & for %%b in (1) do rem"') do (
  set "DEL=%%a"
)
echo say the name of the colors, don't read

call :ColorText 0a "blue"
call :ColorText 0C "green"
call :ColorText 0b "red"
echo(
call :ColorText 19 "yellow"
call :ColorText 2F "black"
call :ColorText 4e "white"

goto :Beginoffile

:ColorText
echo off
<nul set /p ".=%DEL%" > "%~2"
findstr /v /a:%1 /R "^$" "%~2" nul
del "%~2" > nul 2>&1
goto :eof

:Beginoffile

在Ubuntu上的最新版本的Git中,你可以通过以下方式启用diff-highlight:

sudo ln -s /usr/share/doc/git/contrib/diff-highlight/diff-highlight /usr/local/bin
sudo chmod a+x /usr/share/doc/git/contrib/diff-highlight/diff-highlight

然后把这个添加到你的。gitconfig文件中:

[pager]
    log = diff-highlight | less
    show = diff-highlight | less
    diff = diff-highlight | less

脚本可能位于其他发行版中的其他地方。您可以使用locate diff-highlight来查找位置。

使用bat命令:

diff file1 file2 | bat -l diff