在 Gcommit 之后自动关闭 Gstatus window 或在同一个 window 中打开 Gcommit

Auto close Gstatus window after Gcommit or open Gcommit in the same window

是否可以在 Gcommit 后自动关闭 Gstatus window?

我找到了一些代码,但找不到如何让它工作。

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

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

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

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

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

更多注意事项

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

autocmd BufWritePost COMMIT_EDITMSG call s:set_commit_buffer_status()