Kan jeg angre flere ganger i nvi og / eller original vi?

Noen ganger er jeg på et system uten Vim, og bruker standard nvi (BSD-systemer) eller original vi (Arch Linux).

Det er ganske mange forskjeller, men den største irritasjonen er at jeg kan angre bare min siste operasjon. Når du trykker på u den andre gangen, er det en «gjenta».

Er det noen måte å få dette til å fungere?

Fra 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. 

Så trykk u , og fortsett å trykke . for mer angre; Hvis du trykker u igjen, det vil «reversere» retning og trykke på . vil bli gjort om.

Jeg visste aldri om dette før i går; og trodde det på en eller annen måte var en ny funksjon, men det virker som om det har fungert slik siden minst nvi 1,79 fra 1996 .

Dette ikke arbeid i original vi ; der angre er dokumentert som:

 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). 

Som virkelig er en komplisert måte å si at å trykke u igjen vil gjøre om endringene dine.

Hvilket også Vim «s :help undo sier (og hvorfor jeg antok at det ikke ville fungere i nvi):

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

Svar

Det nærmeste originalen vi må angre flere ganger (bortsett fra U som kan tilbakestille flere endringer innen en enkelt linje) er de nummererte registerene, som inneholder de ni siste endringene eller slettinger.

Hvis du setter fra et nummerert register, vil påfølgende punktkommandoer øke det registret når det gjentar kommandoen.

F.eks. med følgende tekst, med markørlinjen angitt med >,

 aaaa > bbbb cccc dddd eeee 

kommandoen dd.. vil resultere i:

 aaaa > eeee 

Hvis du deretter skriver "1P, vil vi sette den siste slettingen fra register "1:

 aaaa > dddd eeee 

Treffer . vil sette innholdet i det neste siste registeret, ved å gjøre "2P, og trykke . igjen vil sette innholdet i registeret "3.

Så kort fortalt "P.. vil sette tilbake all teksten du slettet, og gi deg

 aaaa > bbbb cccc dddd eeee 

Ikke strålende, men bedre enn ingenting! Mer nyttig kan du bruke den i begynnelsen eller slutten av bufferen for raskt å inspisere hva som er i de nummererte registerene dine. Da kan du enkelt slette det du ikke trenger.

Det er dokumentert i vim under :help redo-register.

Svar

Bruk [original] vi, u for å gå n trinn tilbake. For å gå gradvis tilbake trinn for trinn …

  • trykk [n] u for å gå tilbake n trinn
  • og trykk deretter [n] u å gjøre om trinn
  • og deretter trykke på [n + 1] u for å gå tilbake [n + 1] trinn
  • osv.

Kommentarer

  • Jeg har noe nær originalen vi , og det gjør det ikke ' t ser ut til å gå tilbake i trinn.
  • Avtalt. Original Vi kan bare tilbakestille en enkelt endring med u, eller gjenopprette en enkelt linje til hvordan den var før du begynte å redigere den med U.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *