A volte mi trovo su un sistema senza Vim e uso il nvi
predefinito (sistemi BSD) o il originale vi
(Arch Linux).
Ci sono alcune differenze, ma il problema più grande è che posso annullare solo il mio ultima operazione. Premendo u la seconda volta i lavori sono una “ripetizione”.
Cè un modo per farlo funzionare?
Risposta
Da nvi(1)
:
u Undo the last change made to the file. If repeated, the u command alternates between these two states. The . command, when used immediately after u, causes the change log to be rolled forward or backward, depending on the action of the u command.
Quindi premi u , quindi continua a premere . per ulteriori operazioni di annullamento; Se premi u di nuovo, “invertirà” la direzione e premendo . verrà ripetuto.
Non lo sapevo fino a ieri; e pensavo fosse in qualche modo una nuova funzionalità, ma sembra che abbia funzionato in questo modo da almeno nvi 1.79 del 1996 .
Questo non lavora nel original vi ; dove lannullamento è documentato come:
u Undoes the last change made to the current buffer. If repeated, will alternate between these two states, thus is its own inverse. When used after an insert which inserted text on more than one line, the lines are saved in the numeric named buffers (3.5).
Che è davvero un modo complicato per dire che premendo di nuovo u verranno ripetute le modifiche.
Che è anche ciò che dice :help undo
di Vim (e perché ho pensato che non avrebbe funzionato anche in nvi
):
u Undo [count] changes. {Vi: only one level}
Risposta
La cosa più vicina alloriginale vi
deve annullare più operazioni (a parte U
che può annullare più modifiche allinterno di una singola riga) sono i registri numerati, che contengono le nove modifiche più recenti o eliminazioni.
Se si inserisce da un registro numerato, i successivi comandi punto incrementeranno quel registro quando ripete il comando.
Es. con il testo seguente, con la riga del cursore indicata con >
,
aaaa > bbbb cccc dddd eeee
il comando dd..
darà come risultato:
aaaa > eeee
Se digiti "1P
, vi inserirà lultima eliminazione dal registro "1
:
aaaa > dddd eeee
premendo .
inserirà il contenuto del registro più recente successivo, eseguendo "2P
e premendo di nuovo .
verrà inserito il contenuto del registro "3
.
Quindi, in breve, "P..
rimetterà tutto il testo che hai eliminato, lasciandoti con
aaaa > bbbb cccc dddd eeee
Non brillante, ma meglio di niente! Più utilmente puoi usarlo allinizio o alla fine del buffer per ispezionare rapidamente cosa cè nei tuoi registri numerati. Quindi puoi cancellare facilmente ciò che non ti serve.
È documentato in vim sotto :help redo-register
.
Risposta
Utilizzando il vi originale, premi [n] u per tornare indietro di n passaggi. Per tornare progressivamente indietro passo dopo passo …
- premere [n] u per tornare indietro di n passaggi
- quindi premere [n] u per ripetere n passaggi
- quindi premere [n + 1] u per tornare indietro [n + 1] passaggi
- ecc
u
, o ripristinare una singola riga a come era prima di iniziare a modificarlo conU
.