bash, zsh, fish, and tmux bindings for Git objects, powered by fzf
Shell
1,193
100 commits
updated Sep 27, 2026
bash, zsh, fish, and tmux 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.
git for-each-ref bindinggit for-each-ref)The Files binding works outside a git repository as well, where it falls back to the file search of fzf.
[!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 -ixonwill disable it)To workaround the problems, you can use CTRL-G{key} instead of CTRL-GCTRL-{KEY}.
[!WARNING] If zsh's
KEYTIMEOUTis too small (e.g. 1), you may not be able to hit two keys in time.
The shell bindings are only available on the command-line, so they cannot be used when the pane is running another program. fzf-git.tmux binds the same list of commands to tmux keys, which work in any pane.
# ~/.tmux.conf
run-shell /path/to/fzf-git.tmux
fzf-git.tmux expects to find fzf-git.sh next to it, so keep the two files
in the same directory.
The keys are the same as above, with PREFIXg in place of
CTRL-G. So PREFIXgf is for Files,
and PREFIXg? shows the list. Set
@fzf-git-key to use a different key after the prefix key. The option is read
when the bindings are created, so set it before run-shell.
set -g @fzf-git-key G
run-shell /path/to/fzf-git.tmux
fzf starts in a floating pane, in the working directory of the pane it was started from, and the selected objects are sent to that pane as if you typed them.
[!NOTE] A floating pane requires tmux 3.7 or later. On older versions, fzf starts in a popup instead.
[!NOTE] The finder does not load your shell configuration file, so
_fzf_git_fzfredefined there has no effect. Use the tmux environment instead.set-environment -g FZF_GIT_PAGER delta
[!TIP] tmux-fzf-complete completes into a pane the same way, for the things that are not Git objects: files, directories, and the URLs, paths, and sentences on the screen.
# Redefine this function to change the options
_fzf_git_fzf() {
fzf --height 50% --tmux 90%,70% \
--layout reverse --multi --min-height 20+ \
--no-separator --header-border horizontal \
--border-label-pos 2 \
--color 'label:blue' \
--preview-window 'right,50%' --preview-border line \
--bind 'ctrl-/:change-preview-window(down,50%|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 |
(top 24 of 30)
739 followers · starred Aug 2025
385 followers · starred Aug 2022
80 followers · starred Mar 2025
1,542 followers · starred Sep 2024
bash, zsh, fish, and tmux bindings for Git objects, powered by fzf
Shell
1,193
100 commits
updated Sep 27, 2026
bash, zsh, fish, and tmux 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.
git for-each-ref bindinggit for-each-ref)The Files binding works outside a git repository as well, where it falls back to the file search of fzf.
[!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 -ixonwill disable it)To workaround the problems, you can use CTRL-G{key} instead of CTRL-GCTRL-{KEY}.
[!WARNING] If zsh's
KEYTIMEOUTis too small (e.g. 1), you may not be able to hit two keys in time.
The shell bindings are only available on the command-line, so they cannot be used when the pane is running another program. fzf-git.tmux binds the same list of commands to tmux keys, which work in any pane.
# ~/.tmux.conf
run-shell /path/to/fzf-git.tmux
fzf-git.tmux expects to find fzf-git.sh next to it, so keep the two files
in the same directory.
The keys are the same as above, with PREFIXg in place of
CTRL-G. So PREFIXgf is for Files,
and PREFIXg? shows the list. Set
@fzf-git-key to use a different key after the prefix key. The option is read
when the bindings are created, so set it before run-shell.
set -g @fzf-git-key G
run-shell /path/to/fzf-git.tmux
fzf starts in a floating pane, in the working directory of the pane it was started from, and the selected objects are sent to that pane as if you typed them.
[!NOTE] A floating pane requires tmux 3.7 or later. On older versions, fzf starts in a popup instead.
[!NOTE] The finder does not load your shell configuration file, so
_fzf_git_fzfredefined there has no effect. Use the tmux environment instead.set-environment -g FZF_GIT_PAGER delta
[!TIP] tmux-fzf-complete completes into a pane the same way, for the things that are not Git objects: files, directories, and the URLs, paths, and sentences on the screen.
# Redefine this function to change the options
_fzf_git_fzf() {
fzf --height 50% --tmux 90%,70% \
--layout reverse --multi --min-height 20+ \
--no-separator --header-border horizontal \
--border-label-pos 2 \
--color 'label:blue' \
--preview-window 'right,50%' --preview-border line \
--bind 'ctrl-/:change-preview-window(down,50%|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 |
(top 24 of 30)
739 followers · starred Aug 2025
385 followers · starred Aug 2022
80 followers · starred Mar 2025
1,542 followers · starred Sep 2024