Trop souvent, je fais l'erreur de taper avec la mauvaise fenêtre focalisée (et je l'ai fait plusieurs fois avec un authentificateur USB). Dans les programmes avec beaucoup de raccourcis clavier activés (Gmail, VLC, Vim), cela a souvent pour conséquence involontaire de faire des modifications indésirables.
Je peux parfois suivre mes étapes et me souvenir de ce que j'ai tapé pour réparer les modifications ou annuler les paramètres que j'ai modifiés si je me rattrape tôt. Malheureusement, ce n'est pas toujours le cas.
Dans Vim, je pourrais avoir quelque chose d'aussi anodin et apparent que de modifier une ligne de texte qui se défait facilement. Ou, j'aurais pu modifier sans le savoir quelque chose qui n'est pas si facile à identifier. Si je tape accidentellement une séquence de commandes indésirables dans Vim, comment puis-je vérifier et annuler les modifications ou changements de paramètres?
:e!
ferait cela:e!
serait mauvais si vous n'avez pas enregistré depuis le dernier état correct, etu
pourrait être insuffisant si vous avez tapé un tas de choses. (Si vous avez tapédate month
, par exemple, vous auriez supprimé une balise, défini une marque et effectué une recherche, ce qui serait assez déroutant à annuler viau
.)u
faire partie de la séquence, effectuer des annulations au milieu.Réponses:
Invoquer
pour savoir quand vous avez effectué la dernière série de modifications. S'il indique que quelques modifications ont été apportées, par exemple, "il y a 3 secondes", et que vous savez que vous ne les avez intentionnellement modifiées, disons, il y a une minute, puis exécutez
pour revenir à l'état souhaité. Sinon, s'il n'y a pas de changements récents, vous n'avez rien à faire.
En outre référence:
:help undo-tree
.la source
Pour reformuler la question, vous recherchez un moyen de voir ou d'être informé des modifications que vous avez apportées à un fichier, puis utilisez une fonction d'annulation. Il existe peut-être une autre façon ou même des plugins qui prennent en charge cela. Mais je vais expliquer ce que j'utilise dans le même but.
Vous combinez la fonction vim existante pour y parvenir. Par exemple, vous pouvez définir une fonction telle que:
Vous pouvez ensuite l'appeler plus tard et même mapper une touche de raccourci.
Cela ouvrira une vue diff basée sur une fenêtre divisée qui vous montrera les modifications apportées depuis la dernière sauvegarde. Après avoir identifié les modifications apportées, vous pouvez quitter cette vue et utiliser d'autres fonctionnalités de vim telles que l'annulation et l'annulation de l'arborescence, etc. ou même des plugins pour revenir aux états précédents.
Je me rends compte que ce n'est pas idéal parce que vous devez avoir un certain type de flux de travail pour que cela soit utile. Mais cela fonctionne assez bien. Et du côté positif, nous ne changeons pas le fonctionnement de vim et ne nous appuyons pas sur quoi que ce soit à l'extérieur.
J'espère que vous trouvez ça utile. J'ai adapté cette solution il y a quelque temps à partir d'extraits trouvés sur Internet, y compris vim Wikia. C'est donc là que tout crédit est dû.
la source
Il me semble que la réponse simple à cela est d'appuyer sur
u
jusqu'à ce que vous annuliez une modification que vous vouliez conserver, puis d'appuyer surCtrl-R
.la source
Comme @superjer, je continue d'appuyer ujusqu'à ce que le
[+]
marqueur rouge de ma ligne d'état disparaisse.la source
:e!
c'est aussi une bonne solution; ces jours-ci, Vim conservera même vos modifications "rejetées" dans l'historique d'annulation.:earlier 1f
. Les1f
moyens « 1 état enregistré précédent », il va revenir à la précédente vous avez enregistré le fichier. Si le tampon est modifié, cela annule toutes les modifications. Si le tampon n'est pas modifié (c'est-à-dire qu'il est actuellement dans un état enregistré), il reviendra à l'heure précédente où vous avez enregistré le fichier.