Kann ich in nvi und / oder dem original vi mehrere Male rückgängig machen?

13

Manchmal bin ich auf einem System ohne Vim und verwende den Standard nvi(BSD-Systeme) oder das Original vi(Arch Linux).

Es gibt einige Unterschiede, aber das größte Ärgernis ist, dass ich nur meine letzte Operation rückgängig machen kann . Drücken Sie udas zweite Mal, funktioniert ein "Wiederherstellen".

Gibt es eine Möglichkeit, dies zum Laufen zu bringen?

Martin Tournoij
quelle

Antworten:

16

Von 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.

Drücken Sie also uund dann weiter, um den Vorgang .rückgängig zu machen. Wenn Sie uerneut drücken , wird die Richtung 'umgekehrt' und das Drücken von .wird wiederholt.

Davon habe ich bis gestern nichts gewusst. und dachte, es sei irgendwie ein neues Feature, aber es scheint so, als hätte es seit mindestens nvi 1.79 von 1996 funktioniert .

Dies funktioniert nicht im ursprünglichen vi ; wo das Rückgängigmachen dokumentiert ist 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).

Das ist wirklich eine komplizierte Art zu sagen, dass udurch erneutes Drücken Ihre Änderungen wiederhergestellt werden.

Welches ist auch, was Vim's :help undosagt (und warum ich davon ausgegangen bin, dass es auch nicht funktioniert nvi):

 u                       Undo [count] changes.  {Vi: only one level}
Martin Tournoij
quelle
1

Das Original vimuss dem mehrfachen Rückgängigmachen am nächsten kommen (abgesehen davon, Udass mehrere Änderungen innerhalb einer einzelnen Zeile rückgängig gemacht werden können), sind die nummerierten Register, die die neun letzten Änderungen oder Löschungen enthalten.

Wenn Sie aus einem nummerierten Register schreiben, erhöhen nachfolgende Punktbefehle dieses Register, wenn der Befehl wiederholt wird.

ZB mit dem folgenden Text, wobei die Cursorzeile mit gekennzeichnet ist >,

  aaaa
> bbbb
  cccc
  dddd
  eeee

Der Befehl dd..führt zu:

  aaaa
> eeee

Wenn Sie dann Folgendes "1Peingeben, wird vi die letzte Löschung aus dem Register einfügen "1:

  aaaa
> dddd
  eeee

Wenn Sie .auf drücken, wird der Inhalt des nächstletzten Registers übernommen, und wenn Sie erneut "2Pdrücken ., wird der Inhalt des Registers übernommen "3.

Kurz gesagt, "P..wird der gesamte Text, den Sie gelöscht haben, zurückgesetzt

  aaaa
> bbbb
  cccc
  dddd
  eeee

Nicht genial, aber besser als gar nichts! Nützlicherweise können Sie es am Anfang oder Ende des Puffers verwenden, um schnell zu überprüfen, was sich in Ihren nummerierten Registern befindet. Dann können Sie einfach löschen, was Sie nicht brauchen.

Es ist in vim unter dokumentiert :help redo-register.

Antonius
quelle
-1

Drücken Sie unter Verwendung des Original-VIs [n] u, um n Schritte zurückzuspringen. Schritt für Schritt zurück ...

  • drücke [n] u, um n Schritte zurückzugehen
  • Drücken Sie dann [n] u, um die Schritte zu wiederholen
  • Drücken Sie dann [n + 1] u, um die Schritte [n + 1] zurückzugehen
  • etc
Adam Milling
quelle
1
Ich habe etwas in der Nähe des ursprünglichen vi , und es scheint nicht n Schritte zurück zu gehen.
muru
Einverstanden. Original Vi kann nur eine einzelne Änderung mit zurücksetzen uoder eine einzelne Zeile so wiederherstellen, wie sie war, bevor Sie mit der Bearbeitung begonnen haben U.
Antony