Posso annullare più volte in nvi e / o vi originale?

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

Commenti

  • Ho qualcosa di simile al vi originale e non ' sembra tornare indietro di n passaggi.
  • Concordato. Vi originale può ripristinare solo una singola modifica con u, o ripristinare una singola riga a come era prima di iniziare a modificarlo con U.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *