如何为 OSX 差异启用彩色输出?

mip*_*phe 42 terminal diff git macos

我需要比较两个文件(不是同一个文件的两个版本,但是它们由 git 跟踪,但这无关紧要)并且我想要一些彩色输出,我该如何实现?

$ diff file_1 file_2

1,9d0
< <script ... >
<     // more code
< </script>

$ 
Run Code Online (Sandbox Code Playgroud)

上面的代码向我展示了这些文件之间的区别,但是没有任何颜色。对于难以阅读的较长差异。


或者,有没有办法让 git(我确实有很好的颜色输出)来区分两个不同的文件(而不是对文件的更改)?

OSX (10.7.5)

Phi*_*rns 47

比较文件时,我几乎总是使用 vim:

vim -d file_1 file_2
Run Code Online (Sandbox Code Playgroud)

它不仅使用颜色,还排列文件,因此更容易看到添加/删除的行。


jno*_*ack 45

Perl对 diff有一个乏味的colordiff包装器,但我更喜欢grc (generic colorizer)

使用grc (generic colorizer),您可以为不同类型的命令或输入编写自己的包装器(如果您喜欢那种东西)。

下面,grc正在运行/var/log/syslog(在配置中,此文件设置为特定的配色方案),其中突出显示进程、pid、IP 和“连接”。

当然,建议使用别名以免忘记:

alias diff="/usr/bin/grc /usr/bin/diff"
Run Code Online (Sandbox Code Playgroud)

针对 syslog 运行的 grc


如果你有 git,你可能只想使用它,它允许非常健壮的diffing,甚至跨分支。

git diff master:cogs/foo.txt branch:widgets/bar.txt
Run Code Online (Sandbox Code Playgroud)

您不必git diff在存储库中使用,您可以仅将其用于常规文件。在此处输入图片说明

git diff old.txt new.txt
Run Code Online (Sandbox Code Playgroud)

与往常一样,您可以使用别名diff以方便使用。

alias diff="git diff"
Run Code Online (Sandbox Code Playgroud)

  • ``git diff`` 应该在您的答案的顶部!+1 指出它甚至可以在存储库之外工作。 (9认同)
  • 是的,git diff (7认同)
  • 'git diff' 不适用于通用文件,因此将 diff 别名为 'git diff' 可能是有害的 (5认同)

Dav*_*les 10

Homebrew有一个GNU diffutils公式包括支持颜色的命令。diff

$ brew install diffutils
Run Code Online (Sandbox Code Playgroud)
$ /usr/local/bin/diff --color -r -c foo bar
Run Code Online (Sandbox Code Playgroud)

彩色输出

  • 实际上,这是最好的答案 - 只需用适当的 GNU 等效版本替换有缺陷的 MacOS 版本,神奇的是,事情就按照预期的方式工作了。 (2认同)

小智 9

以已批准的答案为基础:grc对此非常有用。它可以与 brew 一起安装,并为许多开箱即用的终端命令着色,diff 就是其中之一。所以...

brew install grc
Run Code Online (Sandbox Code Playgroud)

...安装 grc 到您的系统。然后你需要设置你的别名,brew 警告提供了一个解决方案。只需将以下行添加到您的.bashrc或类似的。

source "`brew --prefix`/etc/grc.bashrc"
Run Code Online (Sandbox Code Playgroud)

这将当前添加以下别名:

alias colourify="$GRC -es --colour=auto"
alias configure='colourify ./configure'
alias diff='colourify diff'
alias make='colourify make'
alias gcc='colourify gcc'
alias g++='colourify g++'
alias as='colourify as'
alias gas='colourify gas'
alias ld='colourify ld'
alias netstat='colourify netstat'
alias ping='colourify ping'
alias traceroute='colourify /usr/sbin/traceroute'
alias head='colourify head'
alias tail='colourify tail'
alias dig='colourify dig'
alias mount='colourify mount'
alias ps='colourify ps'
alias mtr='colourify mtr'
alias df='colourify df'
Run Code Online (Sandbox Code Playgroud)


Col*_*ard 7

你可以让 git 来区分两个不同的文件

git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
Run Code Online (Sandbox Code Playgroud)