Comment fermer le tampon sans fermer la fenêtre?

23

J'ouvre habituellement quelques fenêtres et garde certains tampons ouverts. Étant donné que mon MO dans l'exploration de tampons consiste à utiliser des raccourcis rapides vers :bnet :bp, je veux empêcher les tampons inutiles de distraire ma navigation sur les tampons.

Mais la douleur est, l'émission :bdet :bwentraîne également la fermeture de la fenêtre, au cas où j'en aurais plusieurs ouvertes. Comment fermer (supprimer) un tampon et laisser les fenêtres intactes?

Solution inspirée de la réponse de @ peth

:command! BW :bn|:bd#

C'est simple. Ne fonctionne pas bien avec un seul tampon ouvert (j'obtiens un comportement différent selon la façon dont j'ouvre les fichiers) mais ce n'est pas un gros problème. :)

unperson325680
la source

Réponses:

12

Cela peut être pénible, cette question est soulevée maintes et #vimmaintes fois (Freenode) également.

Certaines personnes recommandent de ne pas supprimer les tampons et de passer à la :b partial<Tab>place de :bn, ce qui fonctionne, mais ce n'est pas ce que vous demandez.

La meilleure façon que je sache de le faire est de passer à un autre tampon et ensuite :bd#, que vous pouvez mapper, bien sûr.

Voir aussi Supprimer un tampon sans fermer la fenêtre du wikia Vim.

peth
la source
Le script ressemble à une solution que je suis prêt à accepter s'il n'y a pas de voie officielle. :)
unperson325680
21

Je me suis un peu trompé 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>

Ou une commande pour votre .vimrc (appelez avec: Bd):

commande Bd bp | sp | bn | bd

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

Jonah Braun
la source
3
Je perds mon fractionnement si je ferme un tampon ouvert dans les deux fenêtres, comme le dernier tampon. +1 pour être plus simple que les scripts wikia à bd sans fermer la fenêtre .
Leif Carlsen
J'utilisais vim-bbye mais votre réponse est beaucoup plus simple et ne dépend d'aucun script. Merci.
Andrew-Dufresne
4

Une fenêtre est une fenêtre dans un tampon. (Voir :help window.) Vous ne pouvez pas avoir de fenêtre sans tampon associé. Vous pouvez cependant utiliser une commande telle que :enewremplacer le contenu de la fenêtre actuelle par un tampon vide.

garyjohn
la source
Je m'attendais à ce qu'après une suppression de tampon, vim puisse passer à un autre tampon, ou en ouvrir un nouveau si nécessaire.
unperson325680
@progo, cela nécessiterait un script, c'est-à-dire un plugin, ou un simple mapping.
Clint Pachl
2

le plugin bufkill.vim fonctionne également. J'aime l'utiliser avec vim-command-w pour plus de fonctionnalités et de subtilités (comme si cela fermait un split si c'était le dernier tampon ou fermait vim si c'était le dernier buffer / split).

Aaron Jensen
la source
2

Voici une autre solution:

map <C-W>o <C-W>n<C-W><C-W><C-W>c

Taper Ctrl + W puis o créera tranquillement une nouvelle fenêtre et fermera l'ancienne fenêtre. Le curseur est laissé dans la nouvelle fenêtre. Il y a un certain nombre d'effets positifs:

  1. Vos dimensions d'origine divisées sont conservées.
  2. Un tampon vide est chargé dans le nouveau fractionnement.
  3. Le tampon d'origine est toujours chargé, utilisez: buffers pour le lister.
  4. Ctrl + o déplace le curseur à sa position d'origine dans l'ancien tampon si vous devez revenir en arrière.
  5. Fonctionne bien même si une seule fenêtre est chargée.
rustushki
la source
1

Je pense que le problème est que la plupart des gens s'attendent à ce que le tampon et la fenêtre vim ne soient pas ce qu'ils sont.

Les gens ont tendance à considérer une fenêtre vim comme un processus autonome qui a sa propre liste de tampons, mais malheureusement ce n'est pas le cas. Une fenêtre vim n'est qu'une fenêtre d'affichage de ses tampons.
Par conséquent, de nombreux problèmes surviennent, comme votre problème, ou le problème que différentes fenêtres partagent la même liste de tampons, vous ne pouvez donc pas modifier le tampon 1 dans la fenêtre A et laisser la fenêtre B ignorer le tampon 1 dans sa liste de tampons.

Ma solution est d'ouvrir deux instances de vim, afin que vous puissiez avoir le type de fenêtre vim que vous souhaitez. Cela fonctionne mieux sur le carrelage des WM.

octref
la source
1

Habituellement, j'ouvre simplement le menu sur n'importe quel tampon. Cela ouvrira le menu dans le volet gauche et le curseur y sera actif. Je reviens donc au tampon actif et supprime le tampon.

Après cela, je peux ouvrir un autre fichier à partir du menu.

Mes étapes c'est:

:Vex

ctrl + w + w

:bd
Apit John Ismail
la source