Skip to content

stsewd/fzf-checkout.vim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fzf-checkout.vim

CI Linter

Manage branches and tags with fzf.

fzf-checkout-demo.mov

Requirements

Installation

Install using vim-plug. Put this in your init.vim.

Plug 'stsewd/fzf-checkout.vim'

Features

  • The current branch or commit will be show at the bottom
  • The first item on the list will be the previous branch/tag
  • Press alt-enter to track a remote branch locally (origin/foo becomes foo)
  • Press ctrl-b to create a branch or tag with the current query as name
  • Press ctrl-d to delete a branch or tag
  • Press ctrl-e to merge a branch
  • Press ctrl-r to rebase a branch
  • Ask for confirmation for irreversible actions like delete
  • Asynchronously execution of commands (Neovim only)
  • Define your own actions

Usage

Call :GBranches [action] [filter] or :GTags [action] to execute an action over a branch or tag. If no action is given, you can make use of defined keymaps to execute an action.

Commands and settings

See :h fzf-checkout for a list of all available commands and settings.

If you have fzf.vim installed, this plugin will respect your g:fzf_command_prefix setting.

Examples

Prefix commands with Fzf, i.e, FzfGBranches and FzfGTags:

let g:fzf_command_prefix = 'Fzf'

Sort branches/tags by committer date. Minus sign to show in reverse order (recent first):

let g:fzf_checkout_git_options = '--sort=-committerdate'

Override the mapping to delete a branch with ctrl-r:

let g:fzf_branch_actions = {
      \ 'delete': {'keymap': 'ctrl-r'},
      \}

Use the bang command to checkout a tag:

let g:fzf_tag_actions = {
      \ 'checkout': {'execute': '!{git} -C {cwd} checkout {branch}'},
      \}

Define a diff action using fugitive. You can use it with :GBranches diff or with :GBranches and pressing ctrl-f:

let g:fzf_branch_actions = {
      \ 'diff': {
      \   'prompt': 'Diff> ',
      \   'execute': 'Git diff {branch}',
      \   'multiple': v:false,
      \   'keymap': 'ctrl-f',
      \   'required': ['branch'],
      \   'confirm': v:false,
      \ },
      \}

Define checkout as the only action for branches:

let g:fzf_checkout_merge_settings = v:false
let g:fzf_branch_actions = {
      \ 'checkout': {
      \   'prompt': 'Checkout> ',
      \   'execute': function('fzf_checkout#run', ['{git} -C {cwd} checkout {branch}']),
      \   'multiple': v:false,
      \   'keymap': 'enter',
      \   'required': ['branch'],
      \   'confirm': v:false,
      \ },
      \}

List the branch/tag information in one line without preview:

let g:fzf_checkout_view_mode = 'inline'

Use git diff for preview instead of git show:

let g:fzf_checkout_preview_cmd = '{git} -C {cwd} diff --color=always {1} --'

Show the branch/tag name only:

let g:fzf_checkout_view_mode = 'inline'
let g:fzf_checkout_git_options = "--format='%(color:yellow)%(refname:short)'"