157 votes

Comment puis-je fermer un tampon sans fermer la fenêtre?

Les vues multicouches de Vim (Windows, Buffers et Tabs) m'ont laissé un peu confus. Supposons que je scinde l'affichage (: sp), puis sélectionne un tampon différent à afficher dans chaque fenêtre. Maintenant, je veux fermer l'un des tampons, mais je ne veux pas que la fenêtre se ferme (après la fermeture, le tampon suivant de la liste ou un tampon vide ne sont pas importants). Comment puis-je faire ceci?

Merci.

183voto

Jonah Braun Points 1404

Je me suis un peu amusé avec ça et j'ai finalement trouvé:

:bp | sp | bn | bd

Voici la version copier / coller pour le mappage des clés:

:bp<bar>sp<bar>bn<bar>bd<CR>

Je l'ai testé un peu et cela fonctionne de manière constante dans diverses conditions. Lorsqu'il est utilisé sur le dernier tampon, il vous laissera un nouveau tampon vide.

59voto

valid Points 517

J'ai cherché pour cela aujourd'hui et est venu avec

:b#|bd#

qui change la fenêtre actuelle de la déjà ouvert et supprime/masque le tampon que vous avez tout juste de passer loin de.

Cela nécessite au moins deux tampons.

Si une autre fenêtre, mais le courant montre le même tampon cela va détruire de fractionnement. Vous pouvez changer toutes les fenêtres précédemment ouvertes tampon avec

:windo b#

J'ai ajouté plus de détails sur l'ancienne commande de discuter d'un mappage (et quelques pièges) dans une réponse à une question similaire.

35voto

Brian Carper Points 40078

Il y a un script sur le wiki Vim pour le faire. Je ne pense pas qu'il y ait un mécanisme qui fait ce que vous voulez.

15voto

ggustafsson Points 262
 nmap <leader>d :bprevious<CR>:bdelete #<CR>
 

Fonctionne comme il se doit jusqu'à ce qu'un tampon soit ouvert dans plusieurs fenêtres. Assez bon, sauf si vous voulez utiliser les plus gros scripts.

Edit: voici ce que j'utilise maintenant:

 function! BufferDelete()
    if &modified
        echohl ErrorMsg
        echomsg "No write since last change. Not closing buffer."
        echohl NONE
    else
        let s:total_nr_buffers = len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))

        if s:total_nr_buffers == 1
            bdelete
            echo "Buffer deleted. Created new buffer."
        else
            bprevious
            bdelete #
            echo "Buffer deleted."
        endif
    endif
endfunction
 

7voto

Nope Points 5757

Je pense que c'est ce que vous cherchez

http://www.vim.org/htmldoc/windows.html#window-moving

Essayez ceci:

Look ar-votre id à l'aide de la mémoire tampon

:buffers

vous verrez la liste des tampons comme

1  a.cpp
2  b.py
3  c.php

si vous souhaitez supprimer.b.py à partir de la mémoire tampon

:2bw

si vous souhaitez supprimer/fermer tous à partir de tampons

:1,3bw

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X