Skip to main content

⚙️ Diff So Fancy

z-shell/zsh-diff-so-fancy​

The wrapper around so-fancy/diff-so-fancy to use with Zsh helps to improve code quality and spot defects faster.

The plugin adds the subcommand dsf to git, and provides the command fancy-diff to pipe the diff output to diff-so-fancy:

  • git dsf to see the diff output.
  • fancy-diff <file1> <file2> to pipe the diff output.
  • diff-so-fancy -h to see the help.

Install Diff-So-Fancy​

Add the following to your .zshrc file:

Using bin-gem-node annex (recommended):

zi ice as'null' sbin'bin/*'
zi light z-shell/zsh-diff-so-fancy

Standard installation:

zi ice as'program' pick'bin/*'
zi light z-shell/zsh-diff-so-fancy

This will add diff-so-fancy, fancy-diff, and git-dsf to $PATH and automatically equip git with the subcommand dsf.

Configuration
diff-so-fancy --colors

Configure git-diff to use diff-so-fancy and suggested colors:

diff-so-fancy --set-defaults

Use diff-so-fancy in patch mode (interoperable with git add --patch):

diff-so-fancy --patch

Configure git to use diff-so-fancy for all diff operations:

git config --global core.pager "diff-so-fancy | less --tabs=4 -RFXS"

Configure git to use diff-so-fancy for git add --patch:

git config --global interactive.diffFilter "diff-so-fancy --patch"
Options

markEmptyLines​

Should the first block of an empty line be colored? (Default: true)

git config --bool --global diff-so-fancy.markEmptyLines false

changeHunkIndicators​

Simplify git header chunks to a more human-readable format. (Default: true)

git config --bool --global diff-so-fancy.changeHunkIndicators false

stripLeadingSymbols​

Should the pesky + or - at the line start be removed? (Default: true)

git config --bool --global diff-so-fancy.stripLeadingSymbols false

useUnicodeRuler​

By default, the separator for the file header uses Unicode line-drawing characters. If this is causing output errors on your terminal, set this to false to use ASCII characters instead. (Default: true)

git config --bool --global diff-so-fancy.useUnicodeRuler false

rulerWidth​

By default, the separator for the file header spans the full width of the terminal. Use this setting to set the width of the file header manually.

git config --global diff-so-fancy.rulerWidth 47 # git log's commit header width