Quando modifichiamo un file, di solito eseguiamo UNDO molti di seguito, diciamo, 20 volte. In VIM, ciò viene di solito eseguito premendo u20 volte e ciò fa sì che VIM vada "in alto" nello stack della cronologia di 20 posizioni. Se poi ne fai un certo change, tutti questi ultimi 20 comandi della cronologia vengono persi e sostituiti da change. Vorrei fare changesenza perdere quelle 20 posizioni. Quindi immagino che vorrei dire a VIM di interrompere la registrazione della cronologia prima di me changee di riprenderla successivamente (non voglio changenella cronologia).
EDIT
Sto cercando di essere più chiaro: ho una funzione FFche aggiorna le ultime righe di un file quando il buffer è scritto. Quindi, se eseguo 20 undos + write, l'ultimo writeapre un nuovo ramo di annullamento. Ho provato ad aggiungere undojoinall'interno FF(cercando di seguire un suggerimento di jlmg di seguito), ma una sequenza write-anndo-write dà un errore: annulla non consentito dopo aver annullato . Potrei invece fare un po ' sed ....dopo aver lasciato vim, ma poiché lo uso attraverso SSHpreferisco una soluzione solo vim (eseguire un comando dopo aver scaricato il buffer non scrive nel file).
MODIFICA 2 Prova a farlo in VIM: apri un file vuoto ed esegui:
i1<ESC>:wa2<ESC>:wa3<ESC>:wa4<ESC>uu:w
Se ora fai un <CTRL>R, VIM riscriverà il '3' indietro, più <CTRL>Rotterrai il 4. Questo succede ANCHE se lo fai :wdopo ciascuno <CTRL>R. Tuttavia, se ogni volta che lo :wfai esegui un fuction via BufWritePre, <CTRL>Rnon scriverà il 3retro. E questo è quello che voglio fare, ecco perché ho scritto per "sospendere il suo spirito", ma forse quello che sto chiedendo non è possibile, oltre a lavorare con il pieno undotree().
vim.se, ci avrei provato. Ad ogni modo, sembra che Sato sappia come aiutare.
sed, ma sed non può fare i tuoi annullamenti, quindi come funzionerà? Se tu fossi in grado di "sospendere la storia", che tipo di comportamento ti aspetteresti da Vim quando in seguito fai un annullamento? L'unico comportamento che ho potuto visualizzare è quello di raggruppare quei cambiamenti (insieme agli annullamenti) in un blocco di annullamento, quindi la mia risposta. Ma se non è così, cos'è?
vi, ma per meviil comando di annullamento annulla una volta, quindi quando si preme diunuovo annulla l'annullamento ("redo"). Questo è vero vi. Quindi io e altri utenti di questo sito potremmo non conoscere la risposta alla tua domanda.