Skip to content

stsewd/fzf-checkout.vim

master
Switch branches/tags
Code

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
doc
 
 
 
 
 
 
 
 
 
 
 
 
 
 

fzf-checkout.vim

CI Linter

Manage branches and tags with fzf.

fzf-checkout

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
  • 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': 'echo system("{git} -C {cwd} checkout {branch}")',
      \   'multiple': v:false,
      \   'keymap': 'enter',
      \   'required': ['branch'],
      \   'confirm': v:false,
      \ },
      \}