J'utilise la fonction undofile dans Vim depuis un certain temps maintenant. C'est une fonctionnalité très intéressante.
Cependant, une gêne est qu'il est très facile d'annuler accidentellement les modifications que j'ai faites la dernière fois que j'ai ouvert le fichier; qui peut être il y a 2 minutes, il y a une heure, la semaine dernière ou il y a un mois.
Par exemple, supposons que j'ouvre un fichier, que j'apporte quelques modifications, que je quitte et modifie d'autres fichiers et découvre que mes modifications n'étaient pas nécessaires, ou peut-être n'étaient-ce que quelques instructions de débogage temporaires.
Auparavant, je pouvais simplement garder la uclé jusqu'à ce que Vim dise "Déjà au plus vieux changement" :wq
, et c'est fait. Mais maintenant, je dois faire très attention à ne pas annuler les modifications que j'ai apportées la dernière fois que j'ai ouvert le fichier. Il n'y a aucun moyen évident de voir quand vous faites cela.
Existe-t-il un moyen de rendre cela plus explicite? Par exemple, en le montrant quelque part, en émettant un avertissement ou même en demandant une confirmation.
la source
Réponses:
J'ai eu exactement ce problème. Voici ce que j'ai ajouté à mon vimrc pour le corriger pour moi:
Notez que vous ne définissez pas l'
undofile
option; vous devez retirer votre vimrc si vous l'avez.Annuler fonctionne désormais comme "normal". Mais nous n'écrire manuellement le fichier undo avec la commande en .
wundo
BufWritePost
La
ReadUndo()
fonction lit manuellement le fichier d'annulation avecrundo
et définit l'undofile
option. Maintenant, nous pouvons utiliser upour remonter plus loin dans l'histoire. J'ai mappé ça à<Leader>u
.Cela pourrait probablement être mieux. Il écrase les informations d'annulation précédentes, vous ne pouvez donc pas revenir à la précédente fois où vous avez modifié le fichier. Mais je n'en ai pas eu besoin moi-même.
la source
Oooh, ooh, enfin une chance de montrer cette commande astucieuse!
Vim peut "remonter le temps". Il a une
:earlier
commande ...... qui peut ramener le fichier à un état précédent. Cela peut être utilisé de plusieurs façons.
Si vous pouvez faire une estimation approximative du temps qu'il vous a fallu pour effectuer ces modifications, vous pouvez alimenter une heure dans cette commande. Ou, par exemple, si vous savez que vous n'avez pas modifié le fichier (à l'exception des modifications que vous souhaitez annuler) au cours de la dernière journée, vous pouvez utiliser
Si vous n'avez écrit (enregistré) le fichier qu'une seule fois depuis les modifications que vous souhaitez annuler ou si vous ne l'avez pas enregistré du tout, vous pouvez utiliser
Comme décrit dans le
:help
texte, cela reviendra à la version précédemment écrite si vous venez d'écrire le fichier, ou reviendra à la dernière fois qu'il a été enregistré si vous n'avez aucune modification enregistrée.Cela ne répond pas précisément à votre question, mais cela ressemble un peu à un problème XY.
la source
u
, et je dépasse accidentellement les modifications que j'ai apportées en ce moment ... Je ne sais pas quel pourrait être le "problème X" d'origine ici?:earlier
le chemin, mais je dois encore deviner ; tout comme je dois deviner lors de l'utilisation duu
... Dans les cas c'est probablement un peu mieux, mais je préférerais quelque chose de plus explicite (si possible).:ea 5d
. Vous pouvez également utiliser l':ea 1f
approche. En tout cas, c'est beaucoup moins granuleux.Mise à jour 2015-06-28 : j'ai corrigé un petit bogue et l'ai publié en tant que plugin . Le code du plugin est légèrement meilleur, en ce sens qu'il avertit à nouveau après avoir déplacé le curseur; Je vous recommande d'utiliser le plugin.
La réponse de superjer fonctionne très bien, mais a l'effet secondaire malheureux que vous ne pouvez annuler que les modifications de la dernière session Vim, et pas toutes les sessions Vim précédentes.
En effet, il
wundo
écrase le fichier d'annulation; ce n'est pas fusionné. Pour autant que je sache, il n'y a aucun moyen de résoudre ce problème.Voici donc ma solution alternative, elle affichera un gros message d'avertissement rouge lorsque vous annulez les modifications du fichier d'annulation.
Ceci est similaire à la réponse d'Ingo Karkat , mais il ne nécessite pas de plugin externe et présente quelques différences subtiles (affiche un avertissement au lieu d'un bip, ne vous oblige pas à appuyer
u
deux fois).Notez que ce seulement modifie la
u
et<C-r>
se fixe, et non laU
,:undo
et les:redo
commandes.la source
J'ai ce qui suit, qui s'arrête et émet un bip lorsque l'annulation atteint le contenu du tampon persistant.
Cela s'intègre au plugin repeat.vim; il nécessite mon plugin ingo-library .
la source
J'ai vraiment aimé l'idée citée alors j'ai fait
:Revert
commande. J'espère que vous le trouverez pertinent pour votre question.Les fonctions d'assistance
Get_seq
etReal_seq
, basées sur undotree , sont nécessaires carundotree()['seq_cur']
elles ne sont parfois pas suffisantes pour localiser la position actuelle dans l'arbre d'annulation. Vous pouvez en lire plus ici .la source
au
. le vimrc là-dedans est le coupable. Laissez-le simplement de côté