Lorsque nous modifions un fichier, nous effectuons généralement plusieurs annulations consécutives, disons 20 fois. Dans VIM, cela se fait généralement en appuyant u20 fois, et cela fait remonter VIM dans la pile d'historique 20 positions. Si vous faites ensuite un certain change, toutes ces 20 dernières commandes d'historique sont perdues et remplacées par change. Je voudrais faire le changesans perdre ces 20 positions. Je suppose donc que je voudrais dire à VIM d'arrêter d'enregistrer l'historique avant de le faire changeet de reprendre l'historique après (je ne veux pas changedans l'histoire).
EDIT
Essayer d'être plus clair: j'ai une fonction FFqui met à jour les dernières lignes d'un fichier lorsque le tampon est écrit. Donc, si je joue 20 undos + write, le dernier writeouvre une nouvelle branche d'annulation. J'ai essayé d'ajouter à l' undojoinintérieur FF(en essayant de suivre une suggestion de jlmg ci-dessous), mais une séquence écriture-annulation-écriture donne une erreur: undojoint non autorisé après l'annulation . Je pourrais plutôt en faire sed ....après avoir quitté à la vimplace, mais comme j'utilise ceci via, SSHje préfère une solution vim uniquement (exécuter une commande après avoir déchargé le tampon n'écrit pas dans le fichier).
EDIT 2 Essayez de faire ceci dans VIM: ouvrez un fichier vierge et faites:
i1<ESC>:wa2<ESC>:wa3<ESC>:wa4<ESC>uu:w
Si maintenant vous faites un <CTRL>R, VIM réécrira le «3», plus <CTRL>Rvous obtiendrez le 4. Cela se produit MÊME si vous faites un :waprès chacun <CTRL>R. Cependant, si à chaque fois que vous effectuez une :wexécution, vous n'effectuerez pas de fuction via BufWritePre, le <CTRL>Rne réécrira pas 3. Et c'est ce que je veux faire, c'est pourquoi j'ai écrit pour «suspendre l'histotrie», mais peut-être que ce que je demande n'est pas possible, en plus de travailler avec le plein undotree().
vim.se, j'aurais essayé ça. Quoi qu'il en soit, il semble que Sato sait comment aider.
sed, mais sed ne peut pas faire vos annulations, alors comment ça va marcher? Si vous pouviez "suspendre l'historique", quel comportement aimable attendriez-vous de Vim lorsque vous effectuerez une annulation par la suite? Le seul comportement que je pouvais visualiser est de regrouper ces changements (avec les annulations) dans un bloc d'annulation, d'où ma réponse. Mais si ce n'est pas ça, c'est quoi?
vi, mais pour moi,vila commande d'annulation annule une fois, puis lorsque vous appuyez àunouveau, elle annule l'annulation ("redo"). C'est vrai vi. Donc, moi et les autres utilisateurs de ce site ne connaissons peut-être pas la réponse à votre question.