Если бы было событие BufferClose
, это было бы легко ... , но, похоже, это невозможно, поскольку невозможно создать окно .
Но в случае вкладок мы можем определить, была ли вкладка закрыта, сохранив количество вкладок и посчитав разницу между TabLeave
и TabEnter
.
Использование: <leader>tr
открывает последнюю закрытую вкладку на новой вкладке (если на вкладке был только один буфер):
let g:reopenbuf = expand('%:p')
function! ReopenLastTabLeave()
let g:lastbuf = expand('%:p')
let g:lasttabcount = tabpagenr('$')
endfunction
function! ReopenLastTabEnter()
if tabpagenr('$') < g:lasttabcount
let g:reopenbuf = g:lastbuf
endif
endfunction
function! ReopenLastTab()
tabnew
execute 'buffer' . g:reopenbuf
endfunction
augroup ReopenLastTab
autocmd!
autocmd TabLeave * call ReopenLastTabLeave()
autocmd TabEnter * call ReopenLastTabEnter()
augroup END
" Tab Restore
nnoremap <leader>tr :call ReopenLastTab()<CR>