stsewd / fzf-checkout.vim

Manage branches and tags with fzf
MIT License
207 stars 18 forks source link
branch fzf git hacktoberfest neovim-plugin tag vim-plugin

fzf-checkout.vim

CI Linter

Manage branches and tags with fzf.

https://user-images.githubusercontent.com/4975310/209593694-46901dd3-6d26-486f-aa66-12321b87145c.mov

Requirements

Installation

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

Plug 'stsewd/fzf-checkout.vim'

Features

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