fzf-git.sh ========== bash and zsh key bindings for Git objects, powered by [fzf][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. [fzf]: https://github.com/junegunn/fzf Installation ------------ 1. Install the latest version of [fzf][fzf] * (Optional) Install [bat](https://github.com/sharkdp/bat) for syntax-highlighted file previews 1. Source [fzf-git.sh](https://raw.githubusercontent.com/junegunn/fzf-git.sh/main/fzf-git.sh) file from your .bashrc or .zshrc Usage ----- * List of bindings * CTRL-GCTRL-F for **F**iles * CTRL-GCTRL-B for **B**ranches * CTRL-GCTRL-T for **T**ags * CTRL-GCTRL-R for **R**emotes * CTRL-GCTRL-H for commit **H**ashes * CTRL-GCTRL-S for **S**tashes * CTRL-GCTRL-E for **E**ach 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}*. * 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 ------------- ```sh # Redefine this function to change the options _fzf_git_fzf() { fzf-tmux -p80%,60% -- \ --layout=reverse --multi --height=50% --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. ```sh gco() { local selected=$(_fzf_git_each_ref --no-multi) [ -n "$selected" ] && git checkout "$selected" } ```