vim/vimscript 中是否有类似 close-window-hook 的东西,这样我每次关闭窗口时都可以调用一个函数?
我想将它用于以下场景:
我使用一个额外的临时窗口来显示有关文件的信息,当我关闭文件时,我希望临时窗口自动关闭,以便 vim 退出。
如果您有任何想法如何在没有钩子(Hook)的情况下实现这一点,那也一样好。
编辑:
我知道:qa[ll]
,但我很懒,只想输入:q
或 ZZ
.
编辑2.71828183:
我接受了自动命令答案,因为它最接近原始问题,但找到了使用预览窗口而不是拆分窗口的另一种解决方案。当最后一个“正常”窗口关闭时,预览窗口会自动关闭。
最佳答案
自动命令很棒!我很确定在这种情况下,BufLeave
会做这项工作,但你可能想要BufWinLeave
?看看:help autocmd-events
获取完整的事件列表。
您需要关心的另一点是:您可以使用缓冲区本地自动命令! (:help autocmd-buflocal
)
您可以使用 au BufLeave <buffer> ...
为当前缓冲区定义一个。 .我最好的猜测是,您可以在任何创建临时窗口的命令中运行它。当您打开暂存窗口时,您应该能够将暂存窗口的缓冲区编号缓存在全局变量中,然后您的自动命令可以删除该缓冲区( :help :bdelete
)。
au BufLeave <buffer> bdelete g:scratch_buffer
call CreateScratchWindow()
function CreateScratchWindow() {
...
let g:scratch_buffer = bufnr("")
}
还有一个函数 winbufnr,用于按窗口获取缓冲区编号。您可以使用其中任何一个 - 只需确保在使用时暂存窗口/缓冲区是最新的! (“”表示当前窗口/缓冲区)。
关于vim - 在vim中关闭缓冲区时如何执行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522150/