2009-02-21 14 views
69

Chiudo una scheda in vim e mi rendo immediatamente conto che è necessario riaprirla nuovamente per qualcosa. C'è un modo per annullare chiudere la scheda in Vim 7.2?Annulla Chiudi scheda in Vim

+0

questo può essere spostato a vi.stackexchange.com? – Sukima

+0

Ciao, [questo bit di vimScript e il plugin windowlayout] (https: //www.reddit.com/r/vim/comments/3ke941/undo_close_tab/cux8gh2) fa il lavoro: riapre la scheda che hai appena chiuso e riporta il layout della finestra che avevi. –

risposta

9

Sto usando un MRU (most recently used files) plugin. Così posso modificare gli ultimi 30 file che ho appena modificato

Ecco i MRU plug-in dei metadati:

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

Uso

Per elencare e modificare i file dall'elenco MRU, è possibile usa il comando ": MRU". Il comando ": MRU" visualizza l'elenco dei file MRU in una finestra temporanea di Vim. Se la finestra MRU è già aperta, l'elenco MRU visualizzato nella finestra viene aggiornato.

+5

Riassumi l'utilizzo di base? –

+0

Non capisco questa risposta ... Sembra che stia raccomandando l'uso di un plugin? – Carpetsmoker

+0

@Carpetsmoker Sì, è: mru.vim. – trusktr

6

La risposta semplice è no, non c'è niente di built-in.

Ma una soluzione praticabile sarebbe utilizzare un plug-in come l'eccellente BufExplorer. Dal momento che il valore predefinito è messa in vendita di buffer utilizzati più di recente in primo luogo, la riapertura di una scheda chiusa sarebbe semplice come premere \bet

+0

Come menzionato da Lucia, è necessario prima andare giù con ' be t' per farlo funzionare. –

114

Il file è probabilmente ancora aperto in un buffer:

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

di riaprire buffer di 18, per esempio:

:tabnew +18buf 
+0

non funziona per me – Chris

+5

Lo fa per me. L'ho provato prima di postare. – greyfade

+5

': tabnew N' non ha funzionato per me. Quello che faccio è ': tabnew' e quindi': bN' dove N è il numero di buffer – alf

1

utilizzare il plug-in di Ben consigliato: BufExplorer Github Mirror

Nella sua risposta si dovrebbe premere <Leader>be<Down>t. L'aggiunta di un collegamento bit:

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

Così che semplicemente <leader>t avrebbe fatto il lavoro.

23
:tabnew# 

riapre file chiuso di recente in una nuova scheda


Edit: Si prega di utilizzare la risposta di greyfade. Non mi piace la mia risposta, ma la tengo qui per riferimenti e informazioni utili sui commenti.

+0

Non ha funzionato per me - Vim 7.4 –

+0

Strano, sembra che abbia funzionato all'inizio ora sta aprendo i buffer indipendenti. –

+0

'#' è l'ultimo file modificato nella finestra corrente. La chiusura di una scheda non registra il file come alternativa ('#'). Devi cercarlo per numero di buffer (': ls') – Sukima

1

Se ci fosse un evento BufferClose questo sarebbe facile ... but it seems that it is not possible since it is not possible for window creation.

Ma nel caso di schede è possibile rilevare se una scheda è stata chiusa tenendo un conto di tabulazione e contando la differenza tra TabLeave e TabEnter.

Uso: <leader>tr riapre l'ultima scheda chiusa in una nuova scheda (supponendo che la scheda aveva solo un singolo 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> 
Problemi correlati