在 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()
是否可以在 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()