2009-02-21 10 views
69

Je ferme un onglet dans vim et réalise immédiatement que je dois le rouvrir à nouveau pour quelque chose. Est-il possible d'annuler l'onglet de fermeture dans Vim 7.2?Annuler l'onglet Fermer dans Vim

+0

cela peut être déplacé à vi.stackexchange.com? – Sukima

+0

Salut, [ce bit de vimscript et le plugin windowlayout] (https: //www.reddit.com/r/vim/comments/3ke941/undo_close_tab/cux8gh2) fait le travail: il rouvre l'onglet que vous venez de fermer et ramène la disposition de la fenêtre que vous aviez. –

Répondre

9

J'utilise un MRU (most recently used files) plugin. Je peux donc modifier les 30 derniers fichiers que je viens sous la direction

Voici les métadonnées du plugin MRU:

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

Utilisation

Pour afficher la liste et modifier des fichiers dans la liste MRU, vous pouvez utilisez la commande ": MRU". La commande ": MRU" affiche la liste des fichiers MRU dans une fenêtre Vim temporaire. Si la fenêtre MRU est déjà ouverte, la liste MRU affichée dans la fenêtre est actualisée.

+5

Pouvez-vous résumer l'utilisation de base? –

+0

Je ne comprends pas cette réponse ... Cela semble recommander l'utilisation d'un plugin? – Carpetsmoker

+0

@Carpetsmoker Oui, c'est: mru.vim. – trusktr

6

La réponse simple est non, il n'y a rien intégré.

Mais une solution réalisable serait d'utiliser un plug-in comme l'excellent BufExplorer. Étant donné que la valeur par défaut la liste les plus récemment utilisés premiers tampons, la réouverture d'un onglet fermé serait aussi simple que d'appuyer sur \bet

+0

Comme mentionné par Lucia, vous devez d'abord descendre avec ' être t' pour que cela fonctionne. –

114

Votre fichier est probablement encore ouvert dans un tampon:

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

Pour réouvrir tampon 18, pour Exemple:

:tabnew +18buf 
+0

ne fonctionne pas pour moi – Chris

+5

Il fait pour moi. Je l'ai essayé juste avant de poster. – greyfade

+5

': tabnew N' n'a pas fonctionné pour moi. Ce que je fais est ': tabnew' puis': bN' où N est le numéro du tampon – alf

1

Utilisez le plug-in Ben suggéré: BufExplorer Github Mirror

Dans sa réponse, il faudrait appuyer sur <Leader>be<Down>t. Ajout d'un raccourci bit:

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

Alors que le simple <leader>t ferait le travail.

23
:tabnew# 

fichier récemment fermé ouvre à nouveau dans un nouvel onglet


Modifier: S'il vous plaît utiliser la réponse de greyfade. Je n'aime pas ma réponse, mais je la garde ici pour des références et des informations utiles.

+0

N'a pas fonctionné pour moi - Vim 7.4 –

+0

Bizarre, semble que cela a fonctionné au début maintenant il ouvre des tampons indépendants. –

+0

'#' est le dernier fichier édité dans la fenêtre courante. La fermeture d'un onglet n'enregistre pas le fichier en tant qu'alternatif ("#"). Vous devez le rechercher par numéro de tampon (': ls') – Sukima

1

S'il y avait un événement BufferClose ce serait facile ... but it seems that it is not possible since it is not possible for window creation. Mais dans le cas des onglets, nous pouvons détecter si un onglet a été fermé en gardant un nombre d'onglets et en comptant la différence entre TabLeave et TabEnter.

Utilisation: <leader>tr rouvre le dernier onglet fermé dans un nouvel onglet (en supposant que l'onglet avait un seul tampon):

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>