How can I enable colored output for OSX diff?
Perl has a a lackluster colordiff wrapper for diff, but I prefer grc (generic colorizer).
With grc (generic colorizer), you can write your own wrappers for different types of commands or inputs (if you like that sort of thing).
Below, grc
is running against /var/log/syslog
(in the config, this file is set to a certain color scheme), where it highlights processes, pids, IPs and "connect"s.
Of course, it is recommended to use an alias so you don't forget:
alias diff="/usr/bin/grc /usr/bin/diff"
If you have git, you may just want to use that, which allows very robust diff
ing, even across branches.
git diff master:cogs/foo.txt branch:widgets/bar.txt
You do not have to use git diff
within a repository, you can use it for just regular files.
git diff old.txt new.txt
As always, you can alias diff
for ease of use.
alias diff="git diff"
When diffing files I almost always use vim:
vim -d file_1 file_2
It not only uses colours, it lines up the files so it's easier to see lines added/removed.
To build on the approved answer: grc works great for this. It is installable with brew and colorizes a number of terminal commands out of the box, diff being one of them. So...
brew install grc
...installs grc to your system. Then you need to set up your aliases, the brew caveat provides a solution. Simply add the following line to your .bashrc
or similar.
source "`brew --prefix`/etc/grc.bashrc"
This will currently add the following aliases:
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'
You can get git to diff two different files:
git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
Homebrew has a formula for GNU diffutils, including a diff
command with support for color.
$ brew install diffutils
$ /usr/local/bin/diff --color -r -c foo bar