bash and zsh key bindings for Git objects, powered by fzf.
Each binding will allow you to browse through Git objects of a certain type, and select the objects you want to paste to your command-line.
- Install the latest version of fzf
- (Optional) Install bat for syntax-highlighted file previews
- Source fzf-git.sh file from your .bashrc or .zshrc
- CTRL-GCTRL-F for Files
- CTRL-GCTRL-B for Branches
- CTRL-GCTRL-T for Tags
- CTRL-GCTRL-R for Remotes
- CTRL-GCTRL-H for commit Hashes
- CTRL-GCTRL-S for Stashes
- CTRL-GCTRL-L for reflogs
- CTRL-GCTRL-W for Worktrees
- CTRL-GCTRL-E for Each ref (
git for-each-ref
)
Warning
You may have issues with these bindings in the following cases:
- CTRL-GCTRL-B will not work if CTRL-B is used as the tmux prefix
- CTRL-GCTRL-S will not work if flow control is enabled,
CTRL-S will freeze the terminal instead
- (
stty -ixon
will disable it)
- (
To workaround the problems, you can use CTRL-G{key} instead of CTRL-GCTRL-{KEY}.
Warning
If zsh's KEYTIMEOUT
is too small (e.g. 1), you may not be able
to hit two keys in time.
- TAB or SHIFT-TAB to select multiple objects
- CTRL-/ to change preview window layout
- CTRL-O to open the object in the web browser (in GitHub URL scheme)
# Redefine this function to change the options
_fzf_git_fzf() {
fzf --height=50% --tmux 90%,70% \
--layout=reverse --multi --min-height=20 --border \
--border-label-pos=2 \
--color='header:italic:underline,label:blue' \
--preview-window='right,50%,border-left' \
--bind='ctrl-/:change-preview-window(down,50%,border-top|hidden|)' "$@"
}
Each binding is backed by _fzf_git_*
function so you can do something like
this in your shell configuration file.
gco() {
_fzf_git_each_ref --no-multi | xargs git checkout
}
gswt() {
cd "$(_fzf_git_worktrees --no-multi)"
}
Variable | Description | Default |
---|---|---|
BAT_STYLE |
Specifies the style for displaying files using bat |
full |
FZF_GIT_CAT |
Defines the preview command used for displaying the file | bat --style=$BAT_STYLE --color=$FZF_GIT_COLOR |
FZF_GIT_COLOR |
Set to never to suppress colors in the list |
always |
FZF_GIT_PAGER |
Specifies the pager command for the preview window | $(git config --get core.pager) |
FZF_GIT_PREVIEW_COLOR |
Set to never to suppress colors in the preview window |
always |