Skip to content

bash and zsh key bindings for Git objects, powered by fzf

Notifications You must be signed in to change notification settings

junegunn/fzf-git.sh

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

60 Commits
 
 
 
 
 
 

Repository files navigation

fzf-git.sh

bash and zsh key bindings for Git objects, powered by fzf.

image

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.

Installation

  1. Install the latest version of fzf
    • (Optional) Install bat for syntax-highlighted file previews
  2. Source fzf-git.sh file from your .bashrc or .zshrc

Usage

List of bindings

  • 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.

Inside fzf

  • 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)

Customization

# 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|)' "$@"
}

Defining shortcut commands

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)"
}

Environment Variables

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

About

bash and zsh key bindings for Git objects, powered by fzf

Topics

Resources

Stars

Watchers

Forks

Sponsor this project

 

Languages