现在我正在使用逃犯来管理几乎所有与git相关的事情,但是我找不到一个好的工作流程来快速可视化并在可用分支之间进行切换。自动完成文件名和分支,我更喜欢分支列表。

#1 楼

要最终得出答案,请使用以下方法来实现此目的:
Vanilla Terminal Vim
在正常模式下按CTRL-Z将使您回到外壳并挂起Vim。执行完git checkout [branchname]后,键入fg命令返回到挂起的Vim,这也将强制Vim刷新。
还值得注意的是,Vim中的:checktime命令可以派上用场,以便对其中的文件系统更改执行缓冲区扫描。已经。有关更多信息,请参见:help :checktime
Vanilla GUI Vim
某些gvim实现将具有:shell支持,这将使用哑终端在Vim内部打开外壳。但是,仅键入以下内容可能会更容易:
:!git checkout [branchname]

这将执行命令,而无需打开新的Shell提示符。 (此选项在Vim终端中也可用)。
vim-fugitive
vim-fugitive是一个插件,允许您从Vim内部使用Git。命令为:
:Git checkout [branchname]

vim-merginal
vim-merginal是一个使用vim逃犯并提供用户友好的界面的插件。 :Merginal
将光标移动到所需分支。
键入cc签出该分支。


评论


这是逃犯,不是逃犯,这就是OP已经在使用的东西。

–muru
15/12/23在20:07

很棒的答案。 vim-merginal是我想要的。

–塞尔吉奥·马尔克斯(Sergio D.Márquez)
2015年12月23日在20:09



我喜欢ctrl-z,因为它会自动加载文件。同事喜欢为命令行提供一个tmux窗口,为vim提供一个tmux窗口,但是当他们执行签出操作或返回vim时合并时,必须进入每个打开的文件和:e!每一次。 (:bufdo e)这是一个令人难忘的痛苦。相反,在发生fg时,按ctrl-z会更容易,Vim自动神奇地执行:e。

– Sukima
16年11月25日在17:25

我可以添加到列表中的另一个很好的逃犯扩展名:github.com/sodapopcan/vim-twiggy

–塞尔吉奥·马尔克斯(Sergio D.Márquez)
18年3月16日19:00

如果git checkout已经完成,:checktime会很方便地重新加载所有打开的缓冲区。

–雷
18年4月19日在22:02

#2 楼

使用vim-merginal插件(逃逸扩展名)。它提供了以下交互式TUI:


查看分支列表
从列表中检查分支
创建新分支
删除分支
合并分支
重新设置分支
解决合并冲突
与遥控器交互(拉,推,获取,跟踪)
与其他分支的区别分支机构的git历史记录



#3 楼

您应该拥抱您的终端。如果使用CTRL-Z,它将在Vim(或您当前正在运行的任何进程)的背景下运行,然后您可以运行所需的任何命令fg,以使该进程回到前台:

评论


...以及何时使用GVim?

–muru
15年12月23日在5:30

:shell是进入或替代进入其他喜爱的终端模拟器的方法

– 65-e9-7e-17
2015年12月23日在5:32



我一直喜欢!git checkout [分支名称]

–bronzehedwick
15/12/23在18:46

#4 楼

逃犯Git checkout <branch>有一个缺点,就是不能自动完成分支名称。使用fzf.vim我创建了以下命令:

function! s:changebranch(branch) 
    execute 'Git checkout' . a:branch
    call feedkeys("i")
endfunction

command! -bang Gbranch call fzf#run({
            \ 'source': 'git branch -a --no-color | grep -v "^\* " ', 
            \ 'sink': function('s:changebranch')
            \ })


希望您发现它有用

#5 楼

@ kubek2k提供的答案是如此惊人。该解决方案比我想象的要好,并且用更少的代码行就能实现。它打开了大门,可以帮助我理解'fzf'的强大个性化用法。

我对其进行了稍微修改,以提供以下功能:


使用逃犯(而不是命令行)获取参考(更好地支持Windows)
列表标签和分支

这里是稍作修改:

function! s:gitCheckoutRef(ref) 
    execute('Git checkout ' . a:ref)
    " call feedkeys("i")
endfunction
function! s:gitListRefs()
   let l:refs = execute("Git for-each-ref --format='\%(refname:short)'")
   return split(l:refs,'\r\n*')[1:] "jump past the first line which is the git command
endfunction
command! -bang Gbranch call fzf#run({ 'source': s:gitListRefs(), 'sink': function('s:gitCheckoutRef'), 'dir':expand('%:p:h') })


评论


听起来不错。但这对我不起作用(在:Gbranch之后没有显示结果),而kubek2k解决方案确实起作用。

–塞巴斯蒂安·穆勒(SebastianMüller)
20 Mar 7 '20 at 22:57

#6 楼

我找到了这个FZF插件,它添加了一个GBranches命令来浏览您的存储库。
https://github.com/stsewd/fzf-checkout.vim