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


697

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


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


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.


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.


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}


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


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.


5

CTRL+r

„R” ma małe litery.


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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.