0

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
4

1 回答 1

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

更多注意事项

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

autocmd BufWritePost COMMIT_EDITMSG call s:set_commit_buffer_status()
于 2019-09-12T01:37:20.100 回答