Vim et l'arbre d'annulation

Lors de l'édition de texte avec vim, quand je veux insérer du texte, il m'est plusieurs fois arrivé de malencontreusement appuyer sur la touche U avant la touche I. Du coup au lieu de seulement passer en mode insertion comme prévu, il annule la dernière action avant de passer en mode insertion. Et cette dernière action est souvent l'insertion d'une certaine quantité de texte, et ce texte a du coup disparu. Ce qui est très pénible.

Ce qui est encore plus pénible, c'est que je ne voyais pas comment récupérer ce bout de texte disparu. Lorsqu'on undo par erreur, la réaction logique est redo, qui est une fonctionnalité qui existe dans vim. Mais le redo ne sert qu'à annuler un undo, or ici il y a eu le i après l'undo, et la dernière action n'est donc pas un undo mais une insertion. Donc redo n'est d'aucun secours.

Undo n'est pas plus utile, parce qu'il peut annuler l'insertion foireuse, mais ensuite il annule ce que j'ai fait encore avant, il n'annule pas d'annulation.

Et en essayant de combiner les deux, en undo l'insertion foireuse, puis redo, dans l'espoir de redo l'insertion perdue, ça n'aide pas non plus, parce qu'en fait il redo bêtement l'insertion foireuse.

Jusqu'à hier, à chaque fois que ça m'est arrivé, je me suis contentée de proférer quelques obscénités et de retaper ce que j'avais perdu.

Je ne pouvais cependant m'empêcher de penser que c'est nul que les données soient aussi fragiles, et que U et I sont aussi côte-à-côte sur un clavier américain, donc ça a dû arriver à pas mal de monde.

Et puis hier, ça m'est de nouveau arrivé, pendant que j'écrivais mon essai d'un réchaud à induction. Sauf que comme j'étais prise dans un élan geekoscientifique, l'insertion qui a été perdue était assez conséquente : environ une page, soit pas loin d'une dizaine de milliers de caractères.

Alors je me suis dit que ce n'est quand même pas possible qu'un programme aussi puissant que vim puisse avoir un undo aussi pathétique. J'ai donc mis en œuvre tous les moyens que je connaissais pour essayer de trouver quelque chose qui me ferait croire que vim vaut mieux que ça.

J'ai fini par trouver, tout simplement dans la documentation de vim. Vim ne gère pas l'historique de manière pathétiquement linéaire, mais sous forme d'un arbre : l'insertion foireuse a été placée à côté de l'insertion que je ne voulais pas perdre. Undo et redo ne sont effectivement d'aucun secours car ils ne permettent pas de passer d'une branche à l'autre, mais d'autres commandes permettent de le faire.

C'est ainsi que grâce à :undolist et :undo< n> j'ai récupéré, non sans grand soulagement, ma page de texte perdue. J'ai ensuite joué avec g- et g+ pour comprendre ces commandes, et arriver plus facilement au même résultat prochaine fois.

J'ai donc appris encore une nouvelle chose sur vim, qui va encore améliorer ma productivité (peut-être) et mon confort (surtout).

Commentaires

1. Le lundi 14 septembre 2009 à 1:12, par W :

Le même problème est posé par les boutons "précédent" et "suivant" des navigateurs Web. Typiquement, on choisit un résultat donné par un moteur de recherche, on suit 2-3 liens, on revient au moteur essayer un autre résultat, on se rend compte que le premier était meilleur, et il faut se débrouiller pour retrouver le chemin qu'on avait suivi parce qu'il a disparu de la liste du bouton "précédent", remplacé par le 2e essai.
Une bonne solution serait de remplacer ladite liste par un menu arborescent, mais je n'ai pas trouvé d'extension pour Firefox satisfaisante (et les autres navigateurs que je connais ne le font pas non plus).

Un arbre d'annulation est donc une fonctionnalité intéressante. Par contre, pour moi qui n'utilise pas vim (plutôt KWrite/Kate ou Emacs selon mon humeur), le problème pratique que tu rencontres me semble un peu contre-intuitif. Comment se fait-il qu'un simple changement de mode, qui si je comprends bien ne modifie pas le contenu du fichier, soit une action annulable (ou du moins qui empêche le redo) ?

2. Le lundi 14 septembre 2009 à 10:10, par Natacha :

J'ai effectivement rencontré le même genre de soucis dans la navigation, et c'est depuis que je fais des recherches en ouvrant le lien donné par le moteur dans un nouvel onglet. Mais j'utilise énormément (déraisonnablement ?) les onglets, j'en ai actuellement environ 70 (tiens je m'attendais à moins que ça), organisés avec l'extension Tree Style Tabs qui permet de s'en sortir. C'est pourquoi ma tentative de passage à midori a lamentablement échouée, faute d'avoir au moins une liste verticale d'onglets.

Pour ce qui est du « simple changement de mode », après vérification le changement de mode seul n'est pas une action, et n'est donc pas annulable et n'empêche pas le redo. Par contre il suffit de taper le moindre caractère en mode insertion pour ce que soit une action, même s'il est effacé de sorte que le texte soit dans le même état en sortant du mode insertion : il y a alors une action, même équivalente à l'identité, qui est annulable et empêche le redo.

Comme à chaque fois que ça m'est arrivé j'ai tenté le redo pour me rendre compte que ça échoue, c'est qu'à chaque fois j'ai inséré quelque chose. Le seul exemple dont je me souvienne clairement est le plus récent, évoqué dans le billet, où je voulais insérer une expression dans une phrase existante, donc la séquence de touches que je voulais faire était : i <espace> <lettres> ; et je ne me suis rendue compte qu'un u s'est glissé avant le i qu'après avoir appuyé sur <espace>. J'ai donc fait <backspace> puis <escape>, pour me retrouver en mode normal, avec comme dernière action l'insertion vide.

Si j'avais été un peu moins rapide, par exemple en ne réfléchissant à quoi écrire qu'une fois entrée en mode insertion (et non pas déjà avant de déplacer le curseur à l'endroit idoine), j'aurais probablement pu me rendre compte de mon erreur avant qu'il soit trop tard et quitter le mode insertion et redo avec succès.

3. Le lundi 14 septembre 2009 à 23:32, par W :

C'est plus clair comme ça, merci.

J'utilise aussi (depuis peu) Tree Style Tabs, mais comme je n'ai pas énormément d'onglets j'utilise toujours pour l'instant la liste horizontale. 70, c'est pas mal, comment fais-tu ça ? Est-ce que tu ne fermes pas ceux dont tu ne te sers plus ? Ou est-ce que tu laisse des onglets ouverts plutôt que d'utiliser les marque-pages ? En tout cas j'aimerais bien savoir combien de place ton Firefox occupe en mémoire.

5. Le samedi 19 septembre 2009 à 19:27, par FrnchFrgg :

Tu aimes bien choisir les langages ésotériques, hein ? Éviter C++, éviter LaTeX... :)

6. Le lundi 21 septembre 2009 à 8:08, par Natacha :

J'avoue qu'il est difficile de savoir dans quelle mesure le côté obscur et méconnu de langages comme Objective-C ou ConTeXt joue dans l'attrait que j'ai pour ces langages. J'ai une certaine tendance à l'anticonformisme et à pas faire comme tout le monde juste pour le principe (antipanurgisme ?)

Cela dit, l'Objective-C et ConTeXt se distinguent respectivement du C++ et de LaTeX par leur minimalisme et leur philosophie directe et bas-niveau, qui sont des choses qui me séduisent intrinsèquement, peu importe la popularité du truc (mais je ne dis pas que c'est pas corrélé : il me semble voir (trop) souvent un engoûement pour les trucs qui ont tout plein de gadgets, de cloches et de sifflets, et je ne serais pas surprise que ça ait beaucoup joué dans la popularité du C++ et de LaTeX, alors que j'ai plutôt tendances à fuir ce genre de choses).

D'ailleurs mon langage de prédilection reste le C, et mon format de documents préféré le plain text, qui poussent minimalisme et bas-niveau encore plus loin, et qui sont pourtant loin d'être ésotériques…

7. Le vendredi 25 septembre 2009 à 21:21, par Un duc :

À propos de réchaud à induction, existe-t-il un moyen (RSS ou autres) d'être informé d'un nouveau texte dans la rubrique Articles (que je viens de découvrir). J'aime beaucoup ces textes hétéroclites.

8. Le vendredi 25 septembre 2009 à 21:22, par Un duc :

Oups, pas Articles, mais Écrits divers.

10. Le samedi 26 septembre 2009 à 20:42, par Emmanuel (was: Un duc) :

> Merci beaucoup pour le commentaire et le compliment qu'il contient, ça me touche vraiment.

J'en suis ravi.

> Cela dit, pourquoi poster ces propos sur cette page ?

Tout simplement parce que ce billet m'a permis de découvrir la rubrique « Écrits divers » grâce au lien vers l'article sur le réchaud à induction. Il est vrai que j'aurais pu poser la question sur une des pages de cette rubrique. Vous ne m'en voulez pas trop, j'espère...

> Les écrits divers sont aussi dans le flux de toutes les pages,

Parfait ! (et désolé pour le dérangement)

Poster un commentaire

Mise en forme historique : pour mettre en valeur un mot ou un groupe de mot, tapez une étoile de part et d'autre, sans mettre d'espace entre l'étoile et le mot, comme ceci : *mise en valeur*. Pour insérer un lien, mettez le entre crochets, comme ceci : [http://instinctive.eu/].

Mise en forme markdown : voir le guide détaillé, en résumé c'est le Markdown traditionnel, sans HTML ni titres, mais avec les tables PHP-Markdown-Extra.

Attention : les balises HTML entrées dans les commentaires seront affichées telles quelles, et non pas interprétées.

Autour de cette page

 

Autour de cet article

  • Publié le 8 septembre 2009 à 11h57
  • État de la bête : geekoscientifique
  • 10 commentaire(s)
  • Tag : Geek

Derniers commentaires

Tags

Archives

Site-level navigation and features

 

Instinctive.eu

Contact

Sections

Validation

Copyright © 2008-2024 Natacha Kerensikova

Butterfly images are copyright © 2008 Shoofly