автокоманды потрясающие! Я почти уверен, что в этом случае 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 для получения номеров буферов по окнам. Вы можете использовать любой из них - просто убедитесь, что чистое окно / буфер актуален, когда вы его используете! («» Означает текущее окно / буфер).