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


13

A volte sono su un sistema senza Vim e uso il predefinito nvi(sistemi BSD) o l'originale vi(Arch Linux).

Ci sono alcune differenze, ma il più grande fastidio è che posso annullare solo la mia ultima operazione. Premendo ula seconda volta le opere sono una "ripetizione".

C'è un modo per farlo funzionare?

Risposte:


16

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 annullare di più; Se si preme di unuovo, si "inverte" la direzione e premendo .si ripeterà.

Non l'ho mai saputo fino a ieri; e ho pensato che fosse in qualche modo una nuova funzionalità, ma sembra che abbia funzionato in questo modo almeno dal n . 1.79 del 1996 .

Questo non funziona nel vi originale ; dove l'annullamento è 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).

Il che è davvero un modo complicato per dire che premere di unuovo ripeterà i tuoi cambiamenti.

Questo è anche ciò che :help undodice Vim (e perché ho pensato che non avrebbe funzionato nvi):

 u                       Undo [count] changes.  {Vi: only one level}

1

La cosa più vicina all'originale che videve annullare più volte (a parte la Uquale può ripristinare più modifiche all'interno di una singola riga) sono i registri numerati, che contengono le nove modifiche o eliminazioni più recenti.

Se si inserisce da un registro numerato, i successivi comandi punto aumenteranno quel registro quando ripete il comando.

Ad esempio con il testo seguente, con la linea del cursore indicata con >,

  aaaa
> bbbb
  cccc
  dddd
  eeee

il comando dd..comporterà:

  aaaa
> eeee

Se poi digiti "1P, vi inserirà la cancellazione più recente dal registro "1:

  aaaa
> dddd
  eeee

Colpire .metterà il contenuto del prossimo registro più recente, facendo "2P, e colpire di .nuovo metterà il contenuto del registro "3.

Quindi, in breve, "P..riporterà tutto il testo che hai eliminato, lasciandoti con

  aaaa
> bbbb
  cccc
  dddd
  eeee

Non geniale, ma meglio di niente! Più utilmente puoi usarlo all'inizio o alla fine del buffer per ispezionare rapidamente cosa c'è nei tuoi registri numerati. Quindi puoi facilmente eliminare ciò che non ti serve.

È documentato in vim sotto :help redo-register.


-1

Usando il vi originale, premi [n] u per tornare indietro di n passi. Per tornare progressivamente passo dopo passo ...

  • premi [n] u per tornare indietro di n passi
  • quindi premi [n] u per ripetere n passaggi
  • quindi premi [n + 1] u per tornare indietro di [n + 1] passaggi
  • eccetera

1
Ho qualcosa vicino al vi originale , e non sembra tornare indietro di n.
muru,

Concordato. Vi originale può ripristinare solo una singola modifica uo ripristinare una singola riga come era prima di iniziare a modificarla U.
Antony,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.