Nogle gange er jeg på et system uden Vim og bruger standard nvi
(BSD-systemer) eller original vi
(Arch Linux).
Der er en hel del forskelle, men den største irritation er, at jeg kan fortryde kun min sidste handling. Ved at trykke på u anden gang arbejder er en “gentag”.
Er der nogen måde at få dette til at fungere?
Svar
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å tryk på u , og tryk derefter på . for at fortryde mere; Hvis du trykker på u igen, det vil “vende” retning og trykke på . vil være en gentagelse.
Jeg vidste aldrig om dette før i går; og troede, det var på en eller anden måde en ny funktion, men det ser ud til, at det har fungeret sådan, siden mindst nvi 1.79 fra 1996 .
Dette ikke arbejde i original vi ; hvor fortrydelsen er dokumenteret 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).
Hvilket virkelig er en kompliceret måde at sige at ved at trykke på u igen vil du foretage dine ændringer igen.
Hvilket også er, hvad Vim “s :help undo
siger (og hvorfor jeg antog, at det ikke også ville fungere i nvi
):
u Undo [count] changes. {Vi: only one level}
Svar
Det tætteste, originalen vi
skal fortryde flere gange (bortset fra U
som kan gendanne flere ændringer inden for en enkelt linje) er de nummererede registre, der indeholder de ni seneste ændringer eller sletninger.
Hvis du lægger fra et nummereret register, vil efterfølgende punktkommandoer forøge det register, når det gentager kommandoen.
F.eks. med den følgende tekst med markørlinjen angivet med >
,
aaaa > bbbb cccc dddd eeee
kommandoen dd..
vil resultere i:
aaaa > eeee
Hvis du derefter skriver "1P
, vil vi sætte den seneste sletning fra register "1
:
aaaa > dddd eeee
Hitting .
vil sætte indholdet af det næste seneste register ved at udføre "2P
og trykke på .
igen vil sætte indholdet af registeret "3
.
Så kort fortalt vil "P..
vende tilbage til al den tekst, du slettede, og efterlade dig med
aaaa > bbbb cccc dddd eeee
Ikke strålende, men bedre end ingenting! Mere nyttigt kan du bruge den i begyndelsen eller slutningen af bufferen til hurtigt at inspicere, hvad der er i dine nummererede registre. Derefter kan du nemt slette det, du ikke har brug for.
Det er dokumenteret i vim under :help redo-register
.
Svar
Brug [original] vi ved at trykke [n] u for at gå n trin tilbage. For gradvis at gå tilbage trin for trin …
- hit [n] u for at gå tilbage n trin
- og tryk derefter på [n] u at gentage trin
- og derefter trykke på [n + 1] u for at gå tilbage [n + 1] trin
- osv.
u
eller gendanne en enkelt linje til, hvordan den var før du begyndte at redigere det medU
.