Gcommit后自动关闭Gstatus窗口或在同一窗口中打开Gcommit

时间:2019-09-09 16:59:52

标签: vim vim-fugitive

在Gcommit之后是否可以自动关闭Gstatus窗口?

我找到了一些代码,但是我找不到如何使它工作的方法。

function! s:close_gstatus()
for l:winnr in range(1, winnr('$'))
    if !empty(getwinvar(l:winnr, 'fugitive_status'))
        execute l:winnr.'close'
    endif
endfor
endfunction

1 个答案:

答案 0 :(得分:1)

要基于某些事件自动调用代码,有一种机制称为autocommands。 这样,您就可以在某些特定事件触发时调用函数,命令或表达式。

下面的示例是当COMMIT_EDITMSG缓冲区为deleted时调用该函数。

" .vimrc
augroup my_fugitive_commit_hook
  autocmd!
  autocmd BufDelete COMMIT_EDITMSG call s:close_gstatus()
augroup END

所有事件列表都可以通过:h autocommand-events找到。

更多注意事项

即使在任何时候关闭COMMIT_EDITMSG缓冲区时,上面的autocmd定义也不会关闭状态窗口,即使由于例如空的提交消息而导致提交失败。 为了改善这种行为,您需要检查git commit是否确实提交并以某种方式成功完成。 我为此付出的2美分是检查COMMIT_EDITMSG缓冲区是否包含适当的提交消息行,并实际上是使用BufWritePost自动命令保存的。 例如

autocmd BufWritePost COMMIT_EDITMSG call s:set_commit_buffer_status()