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 u
20 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 change
sans perdre ces 20 positions. Je suppose donc que je voudrais dire à VIM d'arrêter d'enregistrer l'historique avant de le faire change
et de reprendre l'historique après (je ne veux pas change
dans l'histoire).
EDIT
Essayer d'être plus clair: j'ai une fonction FF
qui met à jour les dernières lignes d'un fichier lorsque le tampon est écrit. Donc, si je joue 20 undos + write
, le dernier write
ouvre une nouvelle branche d'annulation. J'ai essayé d'ajouter à l' undojoin
inté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 vim
place, mais comme j'utilise ceci via, SSH
je 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>R
vous obtiendrez le 4
. Cela se produit MÊME si vous faites un :w
après chacun <CTRL>R
. Cependant, si à chaque fois que vous effectuez une :w
exécution, vous n'effectuerez pas de fuction via BufWritePre
, le <CTRL>R
ne 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,vi
la commande d'annulation annule une fois, puis lorsque vous appuyez àu
nouveau, 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.