Fermer et décharger un tampon sans quitter Vim

55

Souvent, je charge des informations dans un tampon temporaire, puis je le ferme avec :clo!. Mais cela cache le tampon plutôt que de le décharger entièrement, même si je l’ai nohiddendéfini. Je trouve cela fastidieux car je reçois une confirmation supplémentaire lorsque je quitte Vim, à propos du contenu que j’ai déjà (pensé) jeté.

Je pourrais simplement utiliser à la :q!place, mais c'est une mauvaise habitude à prendre, car il quittera Vim entièrement s'il ne reste plus qu'un tampon, ce qui est également gênant. Pire encore, si je tape :qa!, je pourrais perdre beaucoup de travail.

Y a-t-il un terrain d'entente? J'aimerais vraiment une commande qui tue le tampon actuel mais ne quitte pas Vim. Je ne suis pas opposé à l'écrire dans Vimscript, mais je l'éviterais plutôt si la commande existe déjà.

Kevin
la source

Réponses:

70

Il y a un commandement pour faire exactement cela: :bdeleteou tout simplement :bd. Par défaut, il déchargera le tampon actuel. Pour décharger un autre tampon, commencez par obtenir la liste de tous les tampons avec la :bufferscommande, puis spécifiez le nombre suivant :bdpour le supprimer. De plus, :bd+ space+ tabpermet de compléter le nom du tampon

tivn
la source
1
Cela fonctionnera sur le dernier tampon ouvert, ce qui n'est pas exactement ce que je voulais, mais comme il ne se ferme pas, c'est assez bien pour mes besoins.
Kevin
Le plugin vim-bbye pourrait être ce que vous cherchez: github.com/moll/vim-bbye
alxndr
1
Cela ne fonctionne pas dans vi
redolent
En outre, l'alias intégré :lsest plus facile (imo) à mémoriser et fait la même chose que:buffers
kuzyn
Cela ne décharge pas le tampon. En fait, il ne ferme même pas. Cela désactive tout simplement les "bouquins". vim.wikia.com/wiki/Vim_buffer_FAQ
BTRUE
27

Vous pouvez effacer complètement un tampon en utilisant la commande: bwipeout (ou: bw). Cela supprime complètement le tampon de la mémoire, y compris les repères, les options, etc. que vous y avez ajoutés. De même,: bdelete (ou: bd) supprime le tampon, mais le laisse en mémoire et conserve les repères et les options.

Selon le commentaire de Tom Hale, la documentation de Vim recommande d'utiliser: bd over: bw sauf si vous savez ce que vous faites. J'ai tendance à utiliser: bw parce que, comme l'idée de supprimer complètement le tampon de la mémoire, et que je ne me sers pas beaucoup des marques, des paramètres d'option spécifiques au tampon, etc., au point de les obliger à rester après la fermeture de mon tampon.

Comme pour la commande: quit (: q), Vim donnera une erreur si le tampon a changé. Pour résoudre ce problème, vous pouvez ajouter un point d'exclamation après la commande pour supprimer l'invite. Une autre option, au lieu d’ajouter des points d’exclamation, consiste à ajouter «set confirm» à votre vimrc. Avec cet ensemble, vim vous invitera à enregistrer les modifications de fichier à la fermeture.

: bufdo est une commande utile qui exécute une autre commande sur tous les tampons actifs. La combinaison de la commande: bufdo avec la commande: bw /: bd vous permet de supprimer tous les tampons actifs en même temps. Vous pouvez toujours utiliser le point d'exclamation pour supprimer les erreurs, mais si vous le placez après: bufdo, après: bw ou après les deux, des résultats différents pour chacun:

:bd          - deletes the current buffer, error if there are unwritten changes
:bd!         - deletes the current buffer, no error if unwritten changes
:bufdo bd    - deletes all buffers, stops at first error (unwritten changes)
:bufdo! bd   - deletes all buffers except those with unwritten changes
:bufdo! bd!  - deletes all buffers, no error on any unwritten changes

:bw          - completely deletes the current buffer, error if there are unwritten changes
:bw!         - completely deletes the current buffer, no error if unwritten changes
:bufdo bw    - completely deletes all buffers, stops at first error (unwritten changes)
:bufdo! bw   - completely deletes all buffers except those with unwritten changes
:bufdo! bw!  - completely deletes all buffers, no error on any unwritten changes

:set confirm - confirm changes (Yes, No, Cancel) instead of error

Voici quelques autres commandes de tampon utiles:

:ls          - list open buffers
:b N         - open buffer number N (as shown in ls)
:tabe +Nbuf  - open buffer number N in new tab
:bnext       - go to the next buffer (:bn also)
:bprevious   - go to the previous buffer (:bp also)

Il y a beaucoup plus de choses sur le traitement des tampons qui sont hors du champ de cette question. Jetez un coup d'œil sur:
http://vim.wikia.com/wiki/Vim_buffer_FAQ http://vimdoc.sourceforge.net/htmldoc/windows.html#buffers

Soylent17
la source
Pouvez-vous s'il vous plaît ajouter quelques explications à cette réponse?
EvergreenTree
L'aide indique "ne l'utilisez pas à moins que vous ne sachiez ce que vous faites", indiquant que vous :bdpréférez dans la plupart des cas
Tom Hale
1
@TomHale Il serait bon de savoir ce qui reste à :bwfaire au-delà de "Tout ce qui est lié au tampon est perdu. Toutes les marques de ce tampon deviennent non valides, les paramètres des options sont perdus, etc.". Cela me semble tout à fait raisonnable si je veux "fermer" un tampon comme ce serait le cas si je quitte complètement Vim.
Kenny Evitt
Je préfère: bw over: bd parce que si vous utilisez: bd puis appuyez sur <ctrl - ^> pour aller au dernier tampon utilisé, cela le fera apparaître dans la mémoire. : bw me donne plus de contrôle et fait ce que je veux ^^
eli
c'est bien! merci @ Soylent17!
Apollo