I close a tab in vim and immediately realize I need to re-open it again for something. Is there a way to undo close tab in Vim 7.2?
-
Can this be moved to vi.stackexchange.com? – Sukima Jul 16 '15 at 21:01
-
Hi, [this bit of vimscript and the windowlayout plugin](https://www.reddit.com/r/vim/comments/3ke941/undo_close_tab/cux8gh2) does the job: it reopens the tab you just closed and brings back the window layout you had. – Yann Thomas-Gérard Sep 11 '15 at 08:34
6 Answers
Your file is probably still open in a buffer:
:ls " get the buffer number
:tabnew +Nbuf " where N is the buffer number
To reopen buffer 18, for example:
:tabnew +18buf

- 6,661
- 7
- 48
- 63

- 24,948
- 7
- 64
- 80
-
5`:tabnew N` didn't work for me. What I do is `:tabnew` and then `:bN` where N is the buffer number – alf Jul 18 '12 at 21:44
-
@alfonso: The command is `:tabnew +Nbuf` where N is the buffer number. It has to be prepended by a + and suffixed with the word "buf". – greyfade Jul 18 '12 at 23:37
-
5
-
3you could even do :vsp +[bufferNumber]buf helped me reopen closed split in my vim – 3emad Oct 16 '12 at 18:08
-
4The reason this doesn't work is because the `+` is a line reference NOT a buffer reference use `#` not `+` as in `:tabe #5` to open buffer 5 in a new tab. – Sukima Jul 16 '15 at 21:01
-
:tabnew#
Reopens recently closed file in new tab
Edit: Please use greyfade's answer. I don't like my answer, but I'm keeping it here for references and useful comment info.

- 10,818
- 4
- 59
- 65
-
-
`#` is the last edited file in the current window. Closing a tab does not register the file as the alternate (`#`). You have to look it up by buffer number (`:ls`) – Sukima Jul 16 '15 at 20:59
-
-
error prompted: "E194: No alternate file name to substitute for '#' " – Scott Yang Aug 14 '19 at 08:30
I'm using an MRU (most recently used files) plugin. So I can edit the last 30 files I've just edited
Here are the MRU plugin metadata:
File: mru.vim
Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
Version: 3.2 Last Modified:
September 22, 2008
Usage
To list and edit files from the MRU list, you can use the ":MRU" command. The ":MRU" command displays the MRU file list in a temporary Vim window. If the MRU window is already opened, then the MRU list displayed in the window is refreshed.
-
5
-
I don't understand this answer ... This looks like it's recommending the use of a plugin? – Martin Tournoij Feb 07 '15 at 23:08
-
-
this is not so useful if you had just opened 10 files in tabs, switched to one of the middle ones and then closed it because MRU will show the last 10 opened files just in the order they were opened and ofcourse you could have opened more and get lost and need to compare by yourself – elig Aug 26 '20 at 01:39
Simple answer is no, there is nothing built-in.
But a workable solution would be to use a plug-in like the excellent BufExplorer. Since it defaults to listing the most recently used buffers first, reopening a closed tab would be as simple as pressing \bet

- 102,129
- 8
- 104
- 120
-
As mentioned by Lucia, you need to first go down with `
be – Ciro Santilli OurBigBook.com Oct 24 '14 at 21:23t` for it to work.
Use the plug-in Ben Suggested: BufExplorer Github Mirror
In his answer one would have to press <Leader>be<Down>t
. Adding a bit shortcut:
map <silent><leader>t <leader>be<Down>t
So that simply <leader>t
would do the work.

- 13,033
- 6
- 44
- 50
If there were a BufferClose
event this would be easy... but it seems that it is not possible since it is not possible for window creation.
But in the case of tabs we can detect if a tab was closed by keeping a tab count and counting the difference between TabLeave
and TabEnter
.
Usage: <leader>tr
reopens the last closed tab on a new tab (supposing the tab had only a single buffer):
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>

- 347,512
- 102
- 1,199
- 985