Antworten:
Der `.
Befehl bringt Sie zu Ihrer letzten Änderung.
Das `
geht zu einer Marke und .
ist eine "spezielle" Marke, die automatisch an die Position gesetzt wird, an der die letzte Änderung vorgenommen wurde. Sehen Sie :help `.
für einige weitere Informationen.
Es gibt auch ``
welche, die Sie dorthin zurückbringen, wo sich der Cursor befand, bevor Sie Ihren letzten Sprung gemacht haben. Siehe : Hilfe``
für weitere Informationen.
Eine weitere nützliche Marke ist `^
; Dies ist die Position, an der sich der Cursor zuletzt befand, als der Einfügemodus gestoppt wurde. Sehen :help `^
.
Sehen Sie :help mark-motions
für einige weitere allgemeine Informationen über die Verwendung von Marken (darunter auch einige andere „spezielle“ Markierungen , die automatisch eingestellt werden).
'
(Apostroph) anstelle von `
(Backtick) verwenden.
Hier ist ein anderer Ansatz, der zu Ihrem vorgegebenen Szenario passt und zu der Stelle springt, an der Sie sich unmittelbar vor dem befanden gg
(nicht zu der zuletzt geänderten Zeile).
Wenn Sie drücken gg
, wird Ihre alte Cursorposition auf die Sprungliste verschoben . Von :help jumplist
:
Sprünge werden in einer Sprungliste gespeichert. Mit dem Befehl
CTRL-O
undCTRL-I
können Sie zu Cursorpositionen vor älteren Sprüngen und wieder zurück springen. So können Sie die Liste nach oben und unten verschieben. Für jedes Fenster gibt es eine eigene Sprungliste. Die maximale Anzahl von Einträgen ist auf 100 festgelegt.[…]
Wenn Sie einen Sprungbefehl verwenden, wird die aktuelle Zeilennummer am Ende der Sprungliste eingefügt. Befand sich dieselbe Zeile bereits in der Sprungliste, wird sie entfernt. Das Ergebnis ist, dass Sie beim Wiederholen
CTRL-O
nur einmal zu alten Positionen zurückkehren.
Dies setzt voraus, dass Sie Vim (nicht vi) mit der +jumplist
Funktion verwenden. Wenn :echo has('jumplist')
druckt 1
, dann können Sie diese verwenden.
Um die Antwort von dnetserr und den Kommentar von Peter Rincker zu ergänzen, verwaltet Vim eine Liste von Änderungen und weist einige damit verbundene Befehle auf.
:changes
listet die Änderungen auf und zeigt Ihnen, wo sie waren und was sie waren. Zum Beispiel:
change line col text
2 8 17 #include <stdio.h>
1 3 0 #include "stm32f407.auto.h"
>
Die Zeile mit dem >
Symbol zeigt, wo Sie sich im Änderungsstapel befinden, ähnlich wie die Sprungliste ( :jumps
) oder der Tag-Stapel ( :tags
). Ebenso wie die Sprungliste und der Variablenstapel können Sie diese Liste durchlaufen.
Im normalen Modus sollen die Bewegungen g;
zu einem vorherigen Änderungsort und g,
zum nächsten gehen. Sie können auch die Nummer der Änderung vor g;
oder g,
nach dieser Änderung aus der Liste eingeben. Oben, 2g;
würde mich dahin bringen, wo die Änderung mit stdio.h stattgefunden hat.
In der Mitte des Stapels werden die Zahlen aus :changes
aktualisiert, um die relativen Abstände anzuzeigen. Zum Beispiel:
change line col text
1 8 17 #include <stdio.h>
> 0 3 0 #include "stm32f407.auto.h"
1 10 4 other
Dies zeigt, dass ich einen ( 1g;
oder nur g;
) zurück oder einen ( 1g,
oder nur g,
) vorwärts gehen kann .
Dies ist großartig, wenn die Änderung, zu der Sie gelangen möchten, tatsächlich vor einigen Modifikationen stattgefunden hat
Dies hat den Nachteil, dass es nicht wie eine normale Bewegung zu wirken scheint. Zum Beispiel können Sie nicht tun dg;
, um vom Cursor zur vorherigen Änderungsposition zu löschen, wohingegen d'.
und d'^
als Bewegungen arbeiten.
Da der Rückgängig-Befehl in Vi als Wiederholung fungiert, als der letzte Befehl rückgängig gemacht wurde, habe ich ihn uu
als Mittel verwendet, um dorthin zurückzukehren, wo ich ihn zuletzt bearbeitet habe.
Wenn Sie Vim mit nocompatible
set ausführen (wie die meisten Leute), möchten Sie, u
gefolgt von CTRL+R
, undo & redo verwenden. Ansonsten uu
wird wie in Vi gearbeitet.
:set nocompatible
nicht verwendet wird.
vim
(mit nocompatible
) macht zwei Undos mit uu
, aber ich benutze u
und CTRL+r
für den gleichen Effekt.
g;
und verwendeng,
, um zwischen Positionen in der Änderungsliste zu wechseln. Siehe:h g;
und:h g,