Czy mogę cofnąć wiele razy w nvi i / lub oryginalnym vi?

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.

Komentarze

  • Mam coś zbliżonego do oryginalnego vi , a nie ' t wydaje się cofać o n kroków.
  • Zgoda. Oryginalne Vi może cofnąć tylko jedną zmianę za pomocą u lub przywrócić pojedynczą linię do tego, jak to działa było zanim zacząłeś go edytować za pomocą U.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *