Soms zit ik “op een systeem zonder Vim, en gebruik ik de standaard nvi
(BSD-systemen) of de original vi
(Arch Linux).
Er zijn nogal wat verschillen, maar de grootste ergernis is dat ik alleen mijn laatste bewerking. Als u de tweede keer op u drukt, wordt het werk “opnieuw gedaan”.
Is er een manier om dit werkend te krijgen?
Antwoord
Van 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.
Dus druk op u , en blijf dan op . drukken voor meer ongedaan maken; Als je op u nogmaals, het zal van richting “omkeren” en op drukken. zal opnieuw worden uitgevoerd.
Ik wist hier pas gisteren van; en dacht dat het op de een of andere manier een nieuwe functie was, maar het lijkt erop dat het zo heeft gewerkt sinds tenminste nvi 1.79 uit 1996 .
Dit niet werk in het origineel vi ; waar het ongedaan maken wordt gedocumenteerd als:
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).
Wat echt een gecompliceerde manier is om te zeggen dat door nogmaals op u te drukken, uw wijzigingen opnieuw worden uitgevoerd.
Dat is ook wat Vim “s :help undo
zegt (en waarom ik aannam dat het ook” niet zou werken in nvi
):
u Undo [count] changes. {Vi: only one level}
Antwoord
Komt het dichtst in de buurt van het origineel vi
moet meerdere keren ongedaan maken (afgezien van U
die meerdere wijzigingen binnen een enkele regel kan terugdraaien) zijn de genummerde registers, die de negen meest recente wijzigingen bevatten of verwijderingen.
Als u uit een genummerd register plaatst, zullen volgende puntopdrachten dat register verhogen wanneer het de opdracht herhaalt.
Bijv. met de volgende tekst, met de cursorregel aangegeven met >
,
aaaa > bbbb cccc dddd eeee
het commando dd..
zal resulteren in:
aaaa > eeee
Als je vervolgens "1P
typt, zal vi plaatsen de meest recente verwijdering uit register "1
:
aaaa > dddd eeee
.
plaatst de inhoud van het volgende meest recente register door "2P
te doen, en nogmaals op .
te drukken, zal de inhoud van register "3
.
Kortom, "P..
zal alle verwijderde tekst terugzetten, waardoor je
aaaa > bbbb cccc dddd eeee
Niet briljant, maar beter dan niets! Handiger is dat je het aan het begin of einde van de buffer kunt gebruiken om snel te zien wat er in je genummerde registers staat. Dan kun je gemakkelijk verwijderen wat je niet nodig hebt.
Het is gedocumenteerd in vim onder :help redo-register
.
Antwoord
Gebruik de originele vi en druk op [n] u om n stappen terug te gaan. Om geleidelijk stap voor stap terug te gaan …
- druk op [n] u om n stappen terug te gaan
- en druk vervolgens op [n] u stappen opnieuw uitvoeren
- en vervolgens op [n + 1] u drukken om [n + 1] stappen terug te gaan
- enz.
u
, of een enkele regel herstellen naar hoe deze was voordat je het begon te bewerken metU
.