View git diff in Vim tabs.
gitdiffall
function for zsh (requires ruby for running gitdiffall.rb).GitDiff
,GitDiffInfo
,GitDiffOff
commands for Vim.
Install like general Vim plugins.
-
With zcomet
zcomet trigger gitdiffall bootleq/vim-gitdiffall bin
-
or zplug
zplug "bootleq/vim-gitdiffall", use:"bin/*.zsh"
-
or Manual install
- Execute install.zsh (will ask you for copying scripts to path).
- Source path/to/gitdiffall.zsh in your .zshrc.
if [ -e ~/some_dir/gitdiffall.zsh ]; then source ~/some_dir/gitdiffall.zsh fi
In zsh, use gitdiffall
to open git diff in Vim tabs, examples:
gitdiffall
diff current unstaged/staged changes, likegit diff
.gitdiffall --cached
diff staged changes with HEAD.gitdiffall dae86e
see all changes since commit "dae86e".gitdiffall HEAD..HEAD~2
works likegit diff HEAD..HEAD~2
.
For convenience, some special notations are available:
-
gitdiffall @dae86e
expands todae86e^..dae86e
,
this is a shortcut for checking changes at specific commit.
Examples:@@~2
(HEAD~2),@stash@{0}
(stashed entry),@master
(last commit at master branch). -
gitdiffall 1
is similar to@<rev>
, where<rev>
is the 1st previous commit from HEAD.
You can increase the digit for older commits. -
gitdiffall j
andgitdiffall k
shortcut to next/previous commit from last evaluatedgitdiffall <n>
.
(this uses environment variable$_GITDIFFALL_LAST_SHORTCUT
to remember last eval)
During merge conflicts, gitdiffall
will open a 3-way diff in Vim.
gitdiffall.rb takes configure file from one of the following:
$XDG_CONFIG_HOME/gitdiffall/config.rb
$XDG_CONFIG_HOME/gitdiffall-config.rb
~/gitdiffall/config.rb
~/gitdiffall-config.rb
{dir_contains_gitdiffall.rb}/gitdiffall/config.rb
{dir_contains_gitdiffall.rb}/gitdiffall-config.rb
Supported config items:
editor_cmd
(default: respect$EDITOR
, or "vim")
Command to execute Vim.max_files
(default: 14)
Wait for confirmation before open such many files.min_hash_abbr
(default: 5)
When performinggitdiffall <n>
,<n>
must have this many digits to indicate a hash, otherwise it's a number.ignore_pattern
(default:/\.(png|jpg)\Z/i
)
Files match this pattern will not be sent to Vim.
Example config.rb
:
CONFIG = {
:editor_cmd => "vim -u /some/other/vimrc",
:max_files => 14,
:min_hash_abbr => 5,
:ignore_pattern => /(\.(png|jpg)|-compressed\.js)\Z/i
}
In tmux copy mode, select some commit hash and press >
to do gitdiffall in
new tmux window, see tmux-in.rb gist.
bind -t vi-copy > copy-pipe "~/.tmux-in.rb gitdiffall"