Skip to content

z-shell/zsh-diff-so-fancy

Logo ❮ Zi ❯ Plugin - zsh-diff-so-fancy

zsh-diff-so-fancy


The diff-so-fancy

The so-fancy/diff-so-fancy as Github submodule.

The plugin has bin/git-dsf script which adds subcommand dsf to git, and bin/fancy-diff to pipe the diff output to diff-so-fancy.

Manual configuration

diff-so-fancy --colors        # View the commands to set the recommended colors
diff-so-fancy --set-defaults  # Configure git-diff to use diff-so-fancy and suggested colors
diff-so-fancy --patch         # Use diff-so-fancy in patch mode (interoperable with `git add --patch`)
# Configure git to use d-s-f for *all* diff operations
git config --global core.pager "diff-so-fancy | less --tabs=4 -RFX"
# Configure git to use d-s-f 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 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

Install with Zi

The project so-fancy/diff-so-fancy integration with Zi.

Simply add two lines to .zshrc:

Using bin-gem-node annex (recommended):

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

Default:

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

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

No need to use the system package manager or manually configure git, however, if you have the following standard line in your .gitconfig, it will still work as expected:

[core]
	pager = diff-so-fancy | less --tabs=4 -RFX
[interactive]
	diffFilter = diff-so-fancy --patch

Other plugin managers

Zplug

zplug "z-shell/zsh-diff-so-fancy", as:command, use:"bin/"

Zgen

zgen load z-shell/zsh-diff-so-fancy

Without as"program"-like functionality the .plugin.zsh file picks up setup and simulates adding a command to the system, so Zgen and others can work.