Test for BufWritePre autocommand that deletes or unloads the buffer. Test for BufUnload autocommand that unloads all other buffers. STARTTEST :so small.vim :au BufWritePre Xxx1 bunload :au BufWritePre Xxx2 bwipe /^start of A1:.,/end of/w! Xxx1 " write test file Xxx1 $r2:.,/end of/w! Xxx2 " write test file Xxx2 :e! Xxx2 " edit Xxx2 :bdel test8.in " delete this file from the buffer list :e Xxx1 " edit Xxx1 :w " write it, will unload it and give an error msg :w! test.out " Write contents of this file :e! Xxx2 " start editing Xxx2 :bwipe test.out " remove test.out from the buffer list :w " write it, will delete the buffer and give an error msg :w >>test.out " Append contents of this file :au! BufWritePre :func CloseAll() let i = 0 while i <= bufnr('$') if i != bufnr('%') && bufloaded(i) exe i . "bunload" endif let i += 1 endwhile endfunc :func WriteToOut() edit! test.out $put ='VimLeave done' write endfunc :set viminfo='100,nviminfo :au BufUnload * call CloseAll() :au VimLeave * call WriteToOut() :e small.vim :sp mbyte.vim :q :qa! ENDTEST start of Xxx test end of Xxx