Vim - enregistrer et fermer le tampon en une seule commande

25

J'ai un tas de fichiers texte dans un répertoire et je sais que je devrai les éditer individuellement.

Je commence à la ligne d'éloge avec

vim *.txt

qui ouvre les fichiers en tant que tampons séparés dans vim et me laisse regarder le premier. Je le modifie - puis j'utilise ': w' pour le sauvegarder et ': bd' pour fermer le tampon et passer au suivant.

Cette ': w: bd' pour enregistrer et fermer le tampon me semble longue, et je soupçonne qu'il existe une façon plus ninja vim de le faire - quelle est la méthode recommandée pour enregistrer et fermer le tampon sur lequel vous travaillez d'un seul coup?

Joe
la source
Ma façon recommandée serait de simplement passer au :nexttampon et de tout écrire / fermer une fois votre tâche terminée :wqa. Cela suppose que vous avez :set hiddendans votre ~/.vimrc.
romainl

Réponses:

22

Lors de la transmission des fichiers à Vim sur la ligne de commande, ils sont non seulement ouverts dans des tampons, mais remplissent également la liste des arguments . Par conséquent, vous pouvez utiliser des commandes comme :nextet :firstpour les parcourir (et :argdopour le traitement par lots, ce qui peut être une astuce astucieuse). La commande que je recommande pour votre question est :wnext(forme abrégée :wn), qui :writeest le tampon actuel, puis passe à celle- :nextci.

Vous n'avez pas besoin de explicitement :bdeleteun tampon, surtout pas lorsque vous lancez Vim à partir de la ligne de commande avec un ensemble de fichiers, puis quittez-le lorsque vous avez terminé. (Les seules exceptions auxquelles je peux penser sont le déchargement d'un énorme fichier pour économiser la mémoire système ou la réutilisation d'une seule instance GVIM pour de nombreuses modifications différentes.)

Cependant, si vous le voulez vraiment, définissez simplement une commande personnalisée, par exemple

:command Wd write|bdelete
Ingo Karkat
la source
5
Vous avez mentionné deux méthodes pour parvenir à ce que l'OP a demandé, mais le second est pas évident: :w|bd.
Jonno
-> Cela a l'avantage de correspondre à l'approche utilisée par l'OP, bien que je convienne que :nextcela a plus de sens dans certains cas.
Jonno
4

Bien que je suis d' accord que vous ne devez supprimer les tampons ouverts que vous n'êtes pas en train d' utiliser, je tiens à les supprimer parce que j'ai vim-compagnie aérienne la ligne onglet » activé, ce qui montre tous les tampons ouverts tout le temps en haut de la fenêtre. J'ai les éléments suivants dans mon .vimrc:

nnoremap qq :w\|bd<cr>

qq enregistre et ferme le tampon actuel, mais gâche également la fonctionnalité "macro d'enregistrement" de vim (avec laquelle je suis d'accord).

apostl3pol
la source
2
La fonction intégrée ZZvient à l'esprit, mais cela finit par enregistrer et quitter Vim entièrement, plutôt que de simplement supprimer le tampon. Les minuscules zzpeuvent être une alternative intéressante pour tous ceux qui trouvent les macros plus utiles que de centrer la vue sur la ligne de curseur actuelle.
8bittree du
1
Je l'ai récemment changé en Q, après avoir réalisé à quel point l'enregistrement dans Vim peut être précieux.
apostl3pol