Czasami jestem w systemie bez Vima i używam domyślnego nvi
(systemy BSD) lub oryginalny vi
(Arch Linux).
Jest kilka różnic, ale największą irytacją jest to, że mogę cofnąć tylko moją ostatnia operacja. Naciśnięcie u za drugim razem to „ponów”.
Czy jest jakiś sposób, aby to zadziałało?
Odpowiedź
From 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.
Więc naciśnij u , a następnie naciskaj . , aby cofnąć więcej; Jeśli naciśniesz u ponownie, „odwróci” kierunek i naciśnie . będzie ponownym wykonaniem.
Nie wiedziałem o tym aż do wczoraj; i myślałem, że to w jakiś sposób nowa funkcja, ale wygląda na to, że działało w ten sposób od co najmniej nvi 1.79 od 1996 roku .
To nie działa pracować w oryginalny vi ; gdzie cofnięcie jest udokumentowane jako:
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).
Co jest naprawdę skomplikowanym sposobem na powiedzenie, że ponowne naciśnięcie u spowoduje ponowienie zmian.
Co też mówi Vim „s :help undo
(i dlaczego założyłem, że nie będzie działać w nvi
):
u Undo [count] changes. {Vi: only one level}
Odpowiedź
Najbardziej zbliżona do oryginalnego vi
musi wiele cofnąć (oprócz U
, które może cofnąć wiele zmian w jednej linii) to ponumerowane rejestry, które przechowują dziewięć ostatnich zmian lub usunięcia.
Jeśli wstawisz z ponumerowanego rejestru, kolejne polecenia z kropką będą zwiększać ten rejestr, gdy powtórzy polecenie.
Np. z następującym tekstem, z linią kursora oznaczoną >
,
aaaa > bbbb cccc dddd eeee
polecenie dd..
spowoduje:
aaaa > eeee
Jeśli następnie wpiszesz "1P
, vi wstawi ostatnie usunięcie z rejestru "1
:
aaaa > dddd eeee
Trafienie .
umieści zawartość następnego ostatniego rejestru, wykonując "2P
i naciskając .
ponownie wstawi zawartość rejestru "3
.
Krótko mówiąc, "P..
przywróci cały usunięty tekst, pozostawiając
aaaa > bbbb cccc dddd eeee
Nie genialne, ale lepsze niż nic! Bardziej użyteczne jest to, że możesz go używać na początku lub na końcu bufora, aby szybko sprawdzić, co znajduje się w numerowanych rejestrach. Następnie możesz łatwo usunąć to, czego nie potrzebujesz.
Jest to udokumentowane w vimie pod :help redo-register
.
Odpowiedź
Używając oryginalnego vi, naciśnij [n] u, aby cofnąć się o n kroków. Aby stopniowo cofnąć się krok po kroku …
- naciśnij [n] u, aby cofnąć się o n kroków
- , a następnie naciśnij [n] u aby powtórzyć kroki
- następnie naciśnij [n + 1] u, aby cofnąć się [n + 1] kroki
- itp.
u
lub przywrócić pojedynczą linię do tego, jak to działa było zanim zacząłeś go edytować za pomocąU
.