Jak mam wykonać ponownie (tj. „Cofnij cofnij”) w Vimie?

697

W Vimie zbyt wiele cofnąłem. Jak mogę to cofnąć (czyli powtórzyć)?

Lecieć jak po sznurku
źródło
106
ponieważ zebrałem już 2 bliskie głosy, myślę, że należy to tutaj, ponieważ vim jest edytorem programisty.
flybywire
28
Zgadzam się, to jest związane z programowaniem i to jest prawdziwe pytanie.
DigitalRoss,
41
Ktoś tu chodzi i zaznacza każde pytanie Vima jako „należy do SU”, mimo że społeczność już dawno zdecydowała, że ​​Vim należy do SO, ponieważ jest to narzędzie programistyczne.
Brian Carper,
@Brian: Czy masz link do dokumentu, w którym osiągnięto ten konsensus?
za dużo php
12
meta.stackexchange.com/questions/20251/... ale przypominam sobie, że kiedyś to się wydarzyło w zeszłym roku. Vim / Emacs są IDE. Co więcej, języki używane w plikach konfiguracyjnych dla obu są kompletnymi językami skryptowymi Turinga, więc sam proces konfigurowania Vima jest na początku programowaniem.
Brian Carper

Odpowiedzi:

907

Ctrl+r

John Millikin
źródło
2
Chciałbym po prostu wyrzucić wtyczkę undoTree, super niesamowite na czasy, w których pozornie popsułeś się lawiną cofnięć i powtórzeń.
Jake Sellers
3
Jeśli czytam o vi, moje palce działają po prostu same. Polecenia vi nie działają przy przepełnieniu stosu. :-)
ciscogambo
2
Uwaga dla użytkowników komputerów Mac: Ctrl + r w terminalu Mac zepsuje ci dzień w vimie. Nie znam odpowiedniej kombinacji klawiszy w terminalu Mac, aby cofnąć, ale zdecydowanie NIE Ctrl + r!
tpartee
@tpartee Właśnie użyłem Ctrl + r w vimie pod aplikacją terminalową macOS - tutaj nie ma problemów.
Jase
3
Może @partner miał na myśli Cmd + rbałagan? Z pewnością robi coś dziwnego; ale Ctrl + rpo prostu działało dobrze dla mnie (Mac + tmux + vim)
dwanderson
133

Zobacz także :undolist, która oferuje wiele ścieżek w historii cofania. Jest to przydatne, jeśli przypadkowo wpiszesz coś po cofnięciu zbyt wiele.

Piotr
źródło
22
@amindfv: weź numer :undolisti wpisz :undo 178(powiedz), aby przewinąć do kroku 178.
Peter
czy jest jakiś sposób, aby pokazać, co dokładnie zostanie cofnięte :undolist?
csharpfolk
2
@csharpfolk Użyj wtyczki undotree ( github.com/mbbill/undotree )
54

Użyj :earlier/ :later. Aby powtórzyć wszystko, co musisz zrobić

later 9999999d

(zakładając, że najpierw edytowany plik co najwyżej 9999999 dni temu), albo, jeśli pamiętać różnicę między aktualnym stanem cofania i potrzebował jednego, użytkowania Nh, Nmlub Nsna godziny, minuty i sekundy odpowiednio. + :later N<CR><=> Ng+i :later Nfdo zapisu plików.

ZyX
źródło
1
:laterpracował dla mnie w vi(nie vim - wyszukiwał „go” w google, ale wszystkie wyniki są dla „vim”), dzięki!
Luc
@Luc Prawie wszędzie tam, gdzie masz vipolecenie, jest to dowiązanie symboliczne do pliku wykonywalnego vim lub jego kopia. Jednak nie do końca wszędzie.
ZyX
@ZyX Chciałbym, żeby to była prawda. Używam vi tylko po tym, jak bash rzuci a vim: command not found. Następną rzeczą, którą robię, jest to, alias vim=viże piszę to automatycznie, ale mimo to jest to zwykła stara vi. Również redo (ctrl + r) działałoby poprawnie, gdyby vi był aliasem dla vima.
Luc
2
9999999d to 27395 lat temu. Zakładam, że funkcja cofania nie była wtedy zaimplementowana w vi. Możesz zaoszczędzić trochę wyczerpującego pisania i użyć rozsądnej liczby. 9999d odpowiada około 27 latom, 999d - 2,7 lat. Myślę, że w większości przypadków to wystarczy ...
ChristophK,
45

Dokumentacja Vima

<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
źródło
30

W trybie poleceń użyj Uklawisza do cofnięcia i Ctrl+ rdo powtórzenia. Zajrzyj na http://www.vim.org/htmldoc/undo.html .

Xinus
źródło
Co powiesz na tryb wstawiania?
YuFeng Shen
1
@YuFengShen moc vim jest w trybie poleceń. nie potrzebujemy ponawiać w trybie wstawiania
Tomas Hrubovcak
Link jest (skutecznie) zerwany.
Peter Mortensen
14

Najpierw naciśnij Esc klawisz, aby wyjść z trybu edycji.

Następnie,

Aby cofnąć , użyj uklucza tyle razy, ile chcesz cofnąć.

Aby powtórzyć , użyj klawisza Ctrl+r

Amol Udage
źródło
11

Zobacz część „cofnij” i „ponów” w dokumencie Vima .

: red [o] (Ponów jedną cofniętą zmianę) i {count} Ctrl+r (Ponów {liczba} zmian, które zostały cofnięte) są w porządku.

Ponadto : wcześniej {liczba} (przejdź do starszego stanu tekstu {liczba} razy) zawsze może zastąpić cofanie i ponawianie.

wangxinalex
źródło
5

CTRL+r

„R” ma małe litery.

mimetnet
źródło
9
W rzeczywistości nie powinno to mieć znaczenia - tradycyjne konsole nie mają rozróżnienia na ^ri ^R, a Vim za tym podąża.
ephemient
@ephemient: uzgodniono. W MS-DOS nie można nawet pisać małymi literami ^X(gdzie Xmoże być dowolna litera).
nyuszika7h 11.01.11
W Vimie Ctrl-shift-R (ctrl z wielkimi literami R) to tryb zastępowania.
Paul Stelian,
5

Używasz VsVim dla Visual Studio?

Natknąłem się na to podczas eksperymentowania z VsVim, który zapewnia powiązania dla poleceń Vima w Visual Studio .

Wiem o Ctrlrsamym Vimie, ale to szczególne wiązanie nie działa w VsVim (a przynajmniej nie w mojej konfiguracji?).

Co robi prac jest jednak komenda :red. Jest to trochę trudniejsze niż powyższe, ale nadal jest w porządku, gdy naprawdę potrzebujesz.

Kjartan
źródło
Zagłosowano, ponieważ pytanie dotyczy konkretnie vima, a nie Visual Studio.
John Von Neumann
3
@JohnVonNeumann Jest to związane z Vimem, a przynajmniej z Vimem, tylko w kontekście VS. W końcu to doprowadziło mnie do tego pytania. Karanie kogoś za dodanie trochę więcej informacji wydaje się nieco surowe i nieuzasadnione, bo nie sądzisz, nawet jeśli może nieco wykracza poza zakres PO?
Kjartan
2

Praktycznie rzecz biorąc, :undolistjest trudny w użyciu, a Vim :earlieri:later śledzenie zmian czas jest użyteczne tylko w przypadku poprawek kursu.

Biorąc to pod uwagę, korzystam z wtyczki, która łączy te funkcje w celu zapewnienia wizualnego drzewa możliwych do przeglądania cofnięć, zwanego „Gundo”.

Oczywiście jest to przydatne tylko wtedy, gdy potrzebujesz drobnoziarnistej poprawki lub nie jesteś pewien dokładnego stanu dokumentu, do którego chcesz wrócić. Zobacz: Gundo. Wyświetl stylowo swoje drzewo cofania Vima

gregory
źródło