Kan jag ångra flera gånger i nvi och / eller original vi?

Ibland är jag på ett system utan Vim och använder standard nvi (BSD-system) eller original vi (Arch Linux).

Det finns en hel del skillnader, men den största irritationen är att jag kan ångra bara min senaste operationen. Att trycka på u andra gången fungerar är en ”gör om”.

Finns det något sätt att få det att fungera?

Svar

Från 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å tryck på u och tryck sedan på . för mer ångra; Om du trycker på u igen, det kommer att ”vända” riktning och trycka på . kommer att göras om.

Jag visste aldrig om detta förrän igår, och trodde att det på något sätt var en ny funktion, men det verkar som att det har fungerat så här sedan åtminstone nvi 1.79 från 1996 .

Detta fungerar inte arbeta i original vi ; där ångringen är dokumenterad 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). 

Vilket är verkligen ett komplicerat sätt att säga att att trycka på u igen gör dina ändringar om.

Vilket är också vad Vim ”s :help undo säger (och varför jag antog att det inte skulle fungera i nvi):

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

Svar

Det närmaste som originalet vi måste ångra flera gånger (förutom U som kan återställa flera ändringar inom en rad) är de numrerade registren, som innehåller de nio senaste ändringarna eller raderingar.

Om du lägger från ett numrerat register kommer efterföljande punktkommandon att öka det registret när det upprepar kommandot.

t.ex. med följande text, med markörraden angiven med >,

 aaaa > bbbb cccc dddd eeee 

kommandot dd.. kommer att resultera i:

 aaaa > eeee 

Om du sedan skriver "1P, kommer vi att sätta senaste raderingen från registret "1:

 aaaa > dddd eeee 

Slår . lägger till innehållet i nästa senaste register, genom att göra "2P och trycker på . igen kommer innehållet i registret "3.

Så kort sagt, "P.. kommer att lägga tillbaka all text du raderat och lämna dig med

 aaaa > bbbb cccc dddd eeee 

Inte lysande, men bättre än ingenting! Mer användbart är att du kan använda den i början eller slutet av bufferten för att snabbt inspektera vad som finns i dina numrerade register. Sedan kan du enkelt radera det du inte behöver.

Det dokumenteras i vim under :help redo-register.

Svar

Tryck på [n] med original vi u för att gå tillbaka n steg. För att stegvis gå tillbaka steg för steg …

  • tryck [n] u för att gå tillbaka steg steg
  • tryck sedan på [n] u att göra om steg
  • tryck sedan på [n + 1] u för att gå tillbaka [n + 1] steg
  • etc

Kommentarer

  • Jag har något nära originalet vi , och det ' t verkar gå tillbaka n steg.
  • Överens. Original Vi kan bara återställa en enda ändring med u, eller återställa en enda rad till hur den var innan du började redigera den med U.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *