improved colored diff
Branch: master
Clone or download
scottbilas and jeffkaufman Adding Windows support to detecting terminal width (#155)
* Adding Windows support to detecting terminal width

* PEP it

* Missed a couple things
Latest commit 065a1e5 Feb 4, 2019


Improved colored diff



Download the latest icdiff binary and put it on your PATH.

Alternatively, install with pip:

  pip install git+

It can be also installed using Nix

  nix-env -i icdiff


icdiff [options] left_file right_file

Show differences between files in a two column view.


  --version             show program's version number and exit
  -h, --help            show this help message and exit
  --cols=COLS           specify the width of the screen. Autodetection is Unix
  --encoding=ENCODING   specify the file encoding; defaults to utf8
  -E MATCHER, --exclude-lines=MATCHER
                        Do not diff lines that match this regex. Not
                        compatible with the 'line-numbers' option
  --head=HEAD           consider only the first N lines of each file
  -H, --highlight       color by changing the background color instead of the
                        foreground color.  Very fast, ugly, displays all
  -L LABELS, --label=LABELS
                        override file labels with arbitrary tags. Use twice,
                        one for each file
  -N, --line-numbers    generate output with line numbers. Not compatible with
                        the 'exclude-lines' option.
  --no-bold             use non-bold colors; recommended for solarized
  --no-headers          don't label the left and right sides with their file
                        specify the output encoding; defaults to utf8
  -r, --recursive       recursively compare subdirectories
  --show-all-spaces     color all non-matching whitespace including that which
                        is not needed for drawing the eye to changes.  Slow,
                        ugly, displays all changes
  --tabsize=TABSIZE     tab stop spacing
  -u, --patch           generate patch. This is always true, and only exists
                        for compatibility
  -U NUM, --unified=NUM, --numlines=NUM
                        how many lines of context to print; can't be combined
                        with --whole-file
  -W, --whole-file      show the whole file instead of just changed lines and
  --strip-trailing-cr   strip any trailing carriage return at the end of an
                        input line
                        choose which colors are used for which items. Default
                        is --color-map='add:green_bold,change:yellow_bold,desc
                        bold'.  You don't have to override all of them:

Using with Git

To see what it looks like, try:

git difftool --extcmd icdiff

To install this as a tool you can use with Git, copy git-icdiff into your PATH and run:

git icdiff

You can configure git-icdiff in Git's config:

git config --global icdiff.options '--highlight --line-numbers'

Using with subversion

To try it out, run:

svn diff --diff-cmd icdiff

Using with Mercurial

Add the following to your ~/.hgrc:


opts.icdiff=--recursive --line-numbers

Or check more in-depth setup instructions.

Setting up a dev environment

Create a virtualenv and install the dev dependencies. This is not needed for normal usage.

virtualenv venv
source venv/bin/activate
pip install -r requirements-dev.txt

Running tests

./ python2
./ python3

Making a release

  • Update ChangeLog with all the changes since the last release
  • Update __version__ in icdiff
  • Run tests, make sure they pass
  • git tag release-${version}
  • git push origin release-${version}


This file is derived from difflib.HtmlDiff which is under license. I release my changes here under the same license. This is GPL compatible.