2009-02-21 13 views
69

Zamykam zakładkę w vim i od razu zdaję sobie sprawę, że muszę ponownie ją otworzyć. Czy istnieje sposób na cofnięcie zamknięcia karty w Vimie 7.2?Cofnij zamknięcie Tab w Vim

+0

można to przeniósł się do vi.stackexchange.com? – Sukima

+0

Witam, [ten fragment vimscript i wtyczki windowlayout] (https: //www.reddit.com/r/vim/comments/3ke941/undo_close_tab/cux8gh2) wykonuje zadanie: otwiera ponownie zamkniętą kartę i przywraca układ okna, który posiadałeś. –

Odpowiedz

9

Używam MRU (most recently used files) plugin. Więc mogę edytować ostatnie 30 plików Właśnie edytowane

Oto metadanych plugin MRU:

File: mru.vim 
Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com) 
Version: 3.2 Last Modified: 
September 22, 2008 

Wykorzystanie

Aby wyświetlić i edytować pliki z listy MRU można użyj polecenia ": MRU". Polecenie ": MRU" wyświetla listę plików MRU w tymczasowym oknie Vima. Jeśli okno MRU jest już otwarte, lista MRU wyświetlana w oknie jest odświeżana.

+5

Czy możesz podsumować podstawowe użycie? –

+0

Nie rozumiem tej odpowiedzi ... Wygląda na to, że zaleca się użycie wtyczki? – Carpetsmoker

+0

@Carpetsmoker Tak, to jest: mru.vim. – trusktr

6

Prosta odpowiedź brzmi: nie, nie ma nic wbudowanego.

Ale praktycznym rozwiązaniem byłoby użycie wtyczki, takiej jak znakomita BufExplorer. Ponieważ domyślne do wymieniające ostatnio stosowane bufory pierwsze, wznowienie zamkniętą kartę byłoby tak proste, jak naciśnięcie \bet

+0

Jak wspomniano przez Lucia, musisz najpierw zejść z ' be t', aby działał. –

114

Plik jest prawdopodobnie nadal otwarte w buforze:

:ls " get the buffer number 
:tabnew +Nbuf " where N is the buffer number 

do ponownego bufor 18, dla przykład:

:tabnew +18buf 
+0

nie działa dla mnie – Chris

+5

To robi dla mnie. Wypróbowałem go tuż przed wysłaniem. – greyfade

+5

': tabnew N' nie działa dla mnie. To, co robię, to ': tabnew', a następnie': bN' gdzie N jest numerem bufora – alf

1

pomocą plug-in Ben Sugerowana: BufExplorer Github Mirror

W swojej odpowiedzi trzeba by nacisnąć <Leader>be<Down>t. Dodanie bitowy skrót:

map <silent><leader>t <leader>be<Down>t 

Więc po prostu <leader>t by wykonać pracę.

23
:tabnew# 

Otwiera ponownie niedawno zamkniętego pliku w nowej karcie


Edycja: Proszę używać odpowiedzi greyfade użytkownika. Nie podoba mi się moja odpowiedź, ale zachowuję ją tutaj dla referencji i przydatnych informacji o komentarzach.

+0

Nie działa dla mnie - Vim 7.4 –

+0

Dziwne, wydaje się, jakby działało na początku, teraz otwiera niepowiązane bufory. –

+0

'# 'jest ostatnim edytowanym plikiem w bieżącym oknie. Zamknięcie karty nie rejestruje pliku jako alternatywnego ('#'). Musisz sprawdzić go za pomocą numeru bufora (': ls') – Sukima

1

Jeśli zdarzenie miało miejsce BufferClose, byłoby to łatwe ... but it seems that it is not possible since it is not possible for window creation.

Ale w przypadku kart możemy wykryć, czy zakładka została zamknięta, zachowując liczbę zakładek i licząc różnicę między TabLeave i TabEnter.

Zastosowanie: <leader>tr ponownie otwiera ostatnią zamkniętą kartę na nowej karcie (zakładając kartę miał tylko jeden bufor):

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>