Wie mache ich in Vim das Wiederherstellen (dh "Rückgängig machen rückgängig machen")?

697

In Vim habe ich zu viel rückgängig gemacht. Wie mache ich das rückgängig (dh wiederholen)?

Flybywire
quelle
106
Da ich bereits 2 enge Stimmen gesammelt habe, denke ich, dass dies hierher gehört, da vim ein Programmierer-Editor ist.
Flybywire
28
Ich stimme zu, dies hängt mit der Programmierung zusammen und ist eine echte Frage.
DigitalRoss
41
Jemand hier geht herum und markiert jede Vim-Frage als "gehört zu SU", obwohl die Community vor langer Zeit entschieden hat, dass Vim zu SO gehört, da es sich um ein Programmierwerkzeug handelt.
Brian Carper
@Brian: Haben Sie einen Link zu dem Dokument, in dem dieser Konsens erzielt wurde?
zu viel PHP
12
meta.stackexchange.com/questions/20251/… aber ich erinnere mich, dass dies letztes Jahr irgendwann auftauchte. Vim / Emacs sind IDEs. Darüber hinaus sind die in den Konfigurationsdateien für beide verwendeten Sprachen Turing-vollständige Skriptsprachen, sodass das Einrichten von Vim zunächst selbst programmiert wird.
Brian Carper

Antworten:

907

Ctrl+r

John Millikin
quelle
2
Ich möchte nur das UndoTree-Plugin rauswerfen, super toll für die Zeiten, in denen Sie sich scheinbar mit einer Flut von Undos und Redos verarscht haben.
Jake Sellers
3
Wenn ich über vi lese, dann handeln meine Finger einfach von alleine. Die vi-Befehle funktionieren nicht beim Stackoverflow. :-)
Ciscogambo
2
Hinweis für Mac-Benutzer: Strg + r in einem Mac-Terminal ruiniert Ihren Tag in vim. Sie kennen nicht die richtige Tastenkombination im Mac-Terminal, um sie rückgängig zu machen, aber es ist definitiv NICHT Strg + r!
Tpartee
@tpartee Ich habe gerade Strg + r in vim unter der Terminal-App von macOS verwendet - hier keine Probleme.
Jase
3
Vielleicht meinte @tpartee, dass es die Cmd + rDinge durcheinander bringt ? Es macht sicherlich etwas Seltsames; aber hat Ctrl + reinfach gut funktioniert für mich (Mac + tmux + vim)
dwanderson
133

Schauen Sie sich auch an :undolist, das mehrere Pfade durch den Rückgängig-Verlauf bietet. Dies ist nützlich, wenn Sie versehentlich etwas eingeben, nachdem Sie zu viel rückgängig gemacht haben.

Peter
quelle
22
@amindfv: Nehmen Sie die Nummer von :undolistund geben Sie :undo 178(sagen wir) ein, um zu Schritt 178 zurückzuspulen.
Peter
Gibt es eine Möglichkeit zu zeigen, was genau rückgängig gemacht wird :undolist?
Csharpfolk
2
@csharpfolk Verwenden Sie das Undotree-Plugin ( github.com/mbbill/undotree )
54

Verwenden Sie :earlier/ :later. Um alles zu wiederholen, was Sie nur tun müssen

later 9999999d

(unter der Annahme , dass Sie zum ersten Mal vor höchstens 9.999.999 Tagen die Datei bearbeitet), oder, wenn man die Differenz zwischen dem aktuellen Undo Zustand und benötigen ein, Gebrauch erinnern Nh, Nmoder Nsfür Stunden, Minuten und Sekunden auf. + :later N<CR><=> Ng+und :later Nffür Dateischreibvorgänge .

ZyX
quelle
1
:laterarbeitete für mich in vi(nicht vim - auf Google nach "vi" gesucht, aber alle Ergebnisse sind für "vim"), danke!
Luc
@Luc Fast überall, wo Sie viBefehl haben, ist es ein Symlink zu einer ausführbaren vim-Datei oder einer Kopie davon. Nicht überall.
ZyX
@ ZyX Ich wünschte das wäre wahr. Ich benutze vi erst, nachdem bash a geworfen hat vim: command not found. Das nächste, was ich mache, ist, alias vim=viweil ich es so automatisch tippe, aber es ist trotzdem das einfache alte vi. Außerdem hätte Redo (Strg + R) ordnungsgemäß funktioniert, wenn vi ein Alias ​​für vim gewesen wäre.
Luc
2
9999999d ist vor 27395 Jahren. Ich gehe davon aus, dass die Rückgängig-Funktion damals in vi nicht implementiert war. Möglicherweise möchten Sie sich einen umfassenden Schreibaufwand ersparen und eine angemessene Anzahl verwenden. 9999d entspricht ungefähr 27 Jahren, 999d bis 2,7 Jahren. Ich denke in den meisten Fällen ist das genug ...
ChristophK
45

Vim-Dokumentation

<Undo>      or                  *undo* *<Undo>* *u*
u           Undo [count] changes.  {Vi: only one level}

                            *:u* *:un* *:undo*
:u[ndo]         Undo one change.  {Vi: only one level}

                            *CTRL-R*
CTRL-R          Redo [count] changes which were undone.  {Vi: redraw screen}

                            *:red* *:redo* *redo*
:red[o]         Redo one change which was undone.  {Vi: no redo}

                            *U*
U           Undo all latest changes on one line.  {Vi: while not
            moved off of it}
geowa4
quelle
30

Verwenden Sie im Befehlsmodus die UTaste zum Rückgängigmachen und Ctrl+ rzum Wiederherstellen. Schauen Sie sich http://www.vim.org/htmldoc/undo.html an .

Xinus
quelle
Wie wäre es im Einfügemodus?
YuFeng Shen
1
@YuFengShen befindet sich die Leistung von vim im Befehlsmodus. Wir brauchen keine Wiederholung im Einfügemodus
Tomas Hrubovcak
Die Verbindung ist (effektiv) unterbrochen.
Peter Mortensen
14

Drücken Sie zuerst die EscTaste, um den Bearbeitungsmodus zu verlassen.

Dann,

Für undo , Verwendung uTaste so oft wollen Sie rückgängig machen.

Verwenden Sie zum Wiederherstellen die Taste Ctrl+r

Amol Udage
quelle
5

CTRL+r

Das "r" ist klein geschrieben.

mimetnet
quelle
9
Eigentlich sollte es keine Rolle spielen - traditionelle Konsolen haben keinen Unterschied zwischen ^rund ^R, und Vim folgt dem.
Ephemient
@ Ephemient: vereinbart. In MS-DOS können Sie nicht einmal Kleinbuchstaben eingeben ^X(wobei Xein beliebiger Buchstabe sein kann).
Nyuszika7h
In Vim ist Strg-Umschalt-R (Strg mit Großbuchstaben R) der Ersetzungsmodus.
Paul Stelian
5

Verwenden Sie VsVim für Visual Studio?

Ich bin darauf gestoßen, als ich mit VsVim experimentiert habe, das Bindungen für Vim-Befehle in Visual Studio bereitstellt .

Ich weiß Ctrlrin Vim selbst Bescheid , aber diese bestimmte Bindung funktioniert nicht in VsVim (zumindest nicht in meinem Setup?).

Was jedoch funktioniert, ist der Befehl :red. Dies ist ein bisschen mühsamer als oben, aber es ist immer noch in Ordnung, wenn Sie es wirklich brauchen.

Kjartan
quelle
Downvoted, da die Frage speziell nach vim und nicht nach Visual Studio gestellt wird.
John Von Neumann
3
@JohnVonNeumann Dies ist auf Vim bezogen oder zumindest vim Bindungen, gerade im Kontext von VS. Das hat mich schließlich zu dieser Frage gebracht. Jemanden dafür zu bestrafen, dass er ein bisschen mehr Informationen hinzugefügt hat, scheint ein wenig hart und unangebracht zu sein, finden Sie nicht, auch wenn es vielleicht etwas über den Rahmen des OP hinausgeht?
Kjartan
2

In der Praxis :undolistist das schwer zu bedienen und die Vim- :earlierund :laterZeiterfassung von Änderungen ist nur für Kurskorrekturen verwendbar.

Angesichts dessen greife ich auf ein Plug-In zurück, das diese Funktionen kombiniert, um einen visuellen Baum mit durchsuchbaren Rückgängigmachungen namens "Gundo" bereitzustellen.

Dies ist natürlich nur dann zu verwenden, wenn Sie eine feinkörnige Korrektur benötigen oder wenn Sie sich nicht sicher sind, zu welchem ​​genauen Status des Dokuments Sie zurückkehren möchten. Siehe: Gundo. Zeichnen Sie Ihren Vim-Rückgängig-Baum mit Stil

gregory
quelle