Comment puis-je recharger tous les tampons à la fois?

20

Lorsque gitje travaille sur une branche de fonctionnalité dans , j'ai souvent besoin de cacher mes modifications pour valider une correction de bogue dans la branche principale. Lorsque j'ai fini de travailler sur les modifications, I git stash pop, qui met à jour les horodatages des fichiers.

Même si les fichiers sont identiques, la prochaine fois que j'essaie d'enregistrer, j'obtiens:

ATTENTION: Le fichier a été modifié depuis sa lecture !!!

Voulez-vous vraiment y écrire (o / n)?

Je ne veux pas recharger automatiquement le fichier chaque fois qu'il change sur le disque, uniquement lorsque je le fais git stash pop.

À l'heure actuelle, je recharge manuellement chaque tampon individuellement ( :e). Existe-t-il un moyen de le faire en une seule commande?

beatgammit
la source

Réponses:

26

Voyez :help bufdoce que vous voulez faire. Il exécutera une commande dans chaque tampon de la liste des tampons. Par exemple:

:bufdo e

Vous pouvez également envisager :help noconfirmde désactiver la boîte de dialogue de confirmation avant d'émettre la bufdocommande

:set noconfirm

et le réactiver après la bufdocommande.

:set confirm
Matthew S
la source
1
Pour la force, essayez: :bufdo! e.
kenorb
et sans imprimer de messages à l'écran: silencieux! bufdo e
Werner
12

Vous pouvez le faire avec la :checktimecommande. De la documentation :

:checkt[ime]        Check if any buffers were changed outside of Vim.
                    This checks and warns you if you would end up with two
                    versions of a file.

La commande vous demandera quoi faire pour chaque tampon dont le fichier a un horodatage modifié. Pour désactiver cela pour les fichiers qui n'ont pas changé, vous pouvez :set autoreadforcer Vim à simplement les recharger. vim va vous demander si le contenu entre le tampon et le fichier sur le disque ont changé.

Vous pouvez configurer une carte comme celle-ci pour en faciliter l'utilisation:

nnoremap <F5> :checktime<CR>
Tokoyami
la source
Voici quelques informations bonus qui ne font pas vraiment partie de la réponse: Pour moi, sur OpenSUSE, gvim (l'interface graphique GTK pour vim) le fait automatiquement lorsqu'il gagne le focus. Je ne sais pas vraiment pourquoi il le fait et je n'ai pas vérifié d'autres systèmes mais j'ai pensé que cela pourrait être utile en supplément. Peut-être que quelqu'un pourra confirmer?
tokoyami
C'est vraiment utile! Ce que j'ai fait de mon côté, c'était d'intégrer cette commande dans le cadre de mes raccourcis de changement d'onglet. iennoremap tl :tabnext<CR>:checktime<CR>
cr8ivecodesmith
1
@tokoyami, la fonctionnalité que vous avez gvimpeut être liée à un FocusGainedévénement vim. Vous pouvez trouver des informations connexes ici - unix.stackexchange.com/a/383044/99801 .
Victor Yarema