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.
u
, eller gjenopprette en enkelt linje til hvordan den var før du begynte å redigere den medU
.