Manage branches and tags with fzf.
https://user-images.githubusercontent.com/4975310/209593694-46901dd3-6d26-486f-aa66-12321b87145c.mov
fzf
, see https://github.com/junegunn/fzf/blob/master/README-VIM.md#installationgit >=2.13.7
Install using vim-plug.
Put this in your init.vim
.
Plug 'stsewd/fzf-checkout.vim'
alt-enter
to track a remote branch locally (origin/foo
becomes foo
)ctrl-b
to create a branch or tag with the current query as namectrl-d
to delete a branch or tagctrl-e
to merge a branchctrl-r
to rebase a branchCall :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.
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.
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)'"