Kann ich in nvi und / oder dem ursprünglichen vi mehrmals rückgängig machen?

Manchmal bin ich auf einem System ohne Vim und verwende die Standardeinstellung nvi (BSD-Systeme) oder die original vi (Arch Linux).

Es gibt einige Unterschiede, aber der größte Ärger ist, dass ich nur meine rückgängig machen kann letzte Operation. Wenn Sie das zweite Mal auf u drücken, wird „wiederholt“.

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

Antwort

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 u und drücken Sie dann weiter . für weitere Rückgängigmachung; Wenn Sie u wieder wird es die Richtung "umkehren" und das Drücken von . wird eine Wiederholung sein.

Ich wusste bis gestern nichts davon und dachte, es sei irgendwie eine neue Funktion, aber es scheint, als ob seit mindestens nvi 1.79 von 1996 so funktioniert hat.

Dies tut nicht "t arbeiten in der original vi ; Dabei wird das Rückgängigmachen wie folgt dokumentiert:

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

Dies ist eine komplizierte Art zu sagen, dass durch erneutes Drücken von u Ihre Änderungen wiederholt werden.

Das sagt auch Vims ":help undo (und warum ich angenommen habe, dass es auch in nvi):

 u Undo [count] changes. {Vi: only one level} 

Antwort

Das Nächste, was der ursprünglichen vi muss mehrfach rückgängig gemacht werden (abgesehen von U, das mehrere Änderungen innerhalb einer einzelnen Zeile rückgängig machen kann), sind die nummerierten Register, die die neun letzten Änderungen enthalten oder Löschungen.

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

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

 aaaa > bbbb cccc dddd eeee 

den Befehl führt zu:

 aaaa > eeee 

Wenn Sie dann "1P eingeben, wird vi gesetzt Die letzte Löschung aus dem Register "1:

 aaaa > dddd eeee 

. setzt den Inhalt des nächstletzten Registers, indem Sie "2P ausführen, und wenn Sie erneut . drücken, wird der Inhalt des Registers "3.

Kurz gesagt, "P.. setzt den gesamten gelöschten Text zurück und hinterlässt

 aaaa > bbbb cccc dddd eeee 

Nicht brillant, aber besser als nichts! Nützlicher ist, dass Sie es am Anfang oder Ende des Puffers verwenden können, um schnell zu überprüfen, was sich in Ihren nummerierten Registern befindet. Dann können Sie einfach löschen, was Sie nicht benötigen.

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

Antwort

Drücken Sie mit dem Original-vi [n]. u um n Schritte zurück zu gehen. Um schrittweise Schritt für Schritt zurück zu gehen ...

  • drücke [n] u um n Schritte zurück zu gehen
  • und drücke dann [n] u Um n Schritte
  • zu wiederholen, drücken Sie dann [n + 1] u, um [n + 1] Schritte
  • usw. zurückzukehren.

Kommentare

  • Ich habe etwas, das dem ursprünglichen vi nahe kommt, und ' t scheint n Schritte zurück zu gehen.
  • Einverstanden. Original Vi kann nur eine einzelne Änderung mit u zurücksetzen oder eine einzelne Zeile so wiederherstellen, wie sie ist war, bevor Sie mit der Bearbeitung mit U begonnen haben.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.