Answers:
总结答案的方法如下:
在正常模式下按CTRL- 将使您回到Shell并挂起Vim。执行完键入命令后,返回到挂起的Vim,这也将强制Vim刷新。Zgit checkout [branchname]
fg
某些gvim实现将获得:shell
支持,该支持将使用哑终端在Vim内部打开外壳。但是,键入以下内容可能会更容易:
:!git checkout [branchname]
这将执行命令,而无需打开新的shell提示符。(该选项在Vim终端中也可用)。
vim-fugitive是一个插件,允许您从Vim内部使用Git。该命令将是:
:Git checkout [branchname]
vim-merginal是使用vim逃犯并提供用户友好的界面的插件。
:Merginal
。cc
以检出该分支。vim-merginal
是我一直在寻找的东西。
ctrl-z
因为它会自动加载文件。同事们喜欢为命令行提供一个tmux窗口,为vim提供一个tmux窗口,但是当他们执行签出操作或返回vim时合并时,他们必须每次都访问每个打开的文件:e!
。(:bufdo e
)这是要记住的痛苦。取而代之的是,Vim会ctrl-z
在fg
发生时:e
自动执行魔术。
:checktime
可以方便地重新加载所有打开的缓冲区。
使用vim-merginal插件(逃犯扩展名)。它提供用于以下方面的交互式TUI:
您应该拥抱您的终端。如果使用CTRL-Z,它将在Vim(或当前正在运行的任何进程)的背景下运行,那么您可以运行所需的任何命令,fg
以使该进程回到前台:
<CTRL-Z>
git checkout <tab>
fg
:shell
是您进入或替代进入其他喜爱的终端仿真器的方法
!git checkout [branchname]
逃犯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')
\ })
希望你觉得它有用
@ kubek2k提供的答案是如此惊人。该解决方案比我想象的要好,并且用更少的代码行就能实现。它为帮助我理解'fzf'的强大个性化使用打开了大门。
我对其进行了少许修改以额外提供:
这是稍作修改:
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') })
fugitive
,不是fugative
,这就是OP已经在使用的东西。