在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
答案 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()