W tym artykule jest napisane, że „Emacs ma ponawiać, ponieważ można cofać kierunek podczas cofania, a tym samym cofać cofanie”.
Co to znaczy? Jak użytkownik może „przerobić” za pomocą Emacsa?
W tym artykule jest napisane, że „Emacs ma ponawiać, ponieważ można cofać kierunek podczas cofania, a tym samym cofać cofanie”.
Co to znaczy? Jak użytkownik może „przerobić” za pomocą Emacsa?
Odpowiedzi:
Wersja skrócona: cofając cofanie. Jeśli cofniesz, a następnie wykonasz polecenie nieedytowane, takie jak C-f, następne cofnięcie cofnie cofnięcie, co spowoduje ponowne wykonanie.
Dłuższa wersja:
Możesz myśleć o cofnięciu operacji jako o stosie operacji. Jeśli wykonasz jakieś polecenie (nawet polecenie nawigacyjne, takie jak C-f) po sekwencji operacji cofania, wszystkie cofnięcia zostaną wypchnięte na stos operacji. Kolejne cofnięcie cofa ostatnie polecenie. Załóżmy, że masz sekwencję operacji, która wygląda następująco:
Teraz cofniesz. Cofa ostatnią akcję, co powoduje wyświetlenie następującej listy:
Jeśli w tym momencie zrobisz coś innego niż cofnięcie - powiedzmy, C-fstos operacji wygląda następująco:
Teraz, kiedy cofasz, pierwszą rzeczą, która jest cofana, jest cofanie. Wynikające z oryginalnego stosu (i stanu dokumentu):
Jeśli wykonasz polecenie modyfikujące, aby przerwać sekwencję cofania, polecenie to jest dodawane po cofnięciu, a zatem jest pierwszą rzeczą, którą należy później cofnąć. Przypuśćmy, że zamiast uderzania przesuwałeś się wstecz w „pasku” C-f. Wtedy byś miał
To dodawanie / ponowne dodawanie odbywa się w nieskończoność. Trochę się przyzwyczaja, ale tak naprawdę daje Emacsowi bardzo elastyczny i potężny mechanizm cofania / ponawiania.
Cofnąć: C-_
Aby powtórzyć po cofnięciu: C-g C-_
Wpisz wiele razy, C-_ aby powtórzyć to, co zostało cofnięte. C-_ Aby powtórzyć polecenie emacs wiele razy, wykonaj polecenie, a następnie wpisz, C-xza następnie wpisz wiele razy zklawisz, aby powtórzyć polecenie (ciekawe, jeśli chcesz wykonać makro wiele razy)
C-u
, na przykład C-u 8 *
(wstaw osiem * w miejscu, w którym znajduje się kursor). Możesz więc użyć C-u x C-_
do cofnięcia x kroków.
C-x e
) możesz naciskać e
tyle razy, ile potrzebujesz, aby wykonać je ponownie.
C-/
i C-x u
alternatywne cofanie przypisania klawiszy, co odpowiada C-_
. Wolę, C-/
ponieważ łatwiej jest trafić.
C-g C-_
„cofnie się po cofnięciu”, dotyczy to tylko pierwszego naciśnięcia kombinacji. Następnie powtórz swój klawisz cofania bez C-g
. Aby powtórzyć trzy razy zaraz po cofnięciu, wpisz C-g C-_ C-_ C-_
. Jeśli C-g C-_ C-g C-_ C-g C-_
napiszesz, będziesz krążył w kółko, cofając ponawianie swoich cofnięć ...
C-/
C-/
C-/
C-g
C-/
C-g
C-/
C-/
. Zauważ, że C-g
się nie powtarza.C-g
C-/
C-g
C-/
C-/
Jeśli od ostatniego polecenia cofania naciśniesz dowolny klawisz (czy wpisujesz znaki, czy po prostu przesuwasz kursor), nie musisz pisać C-g
przed następnym cofnięciem / ponownym. C-g
jest tylko bezpiecznym klawiszem do trafienia, który sam w sobie nie robi nic, ale liczy się jako klawisz cofania, który sygnalizuje koniec sekwencji cofania. Naciśnięcie innego polecenia, takiego jak C-f
też, działałoby; po prostu przesuwa kursor z miejsca, w którym go masz.
Jeśli uderzyłeś C-g
lub wykonałeś inne polecenie, kiedy nie chciałeś, a teraz cofasz się w złym kierunku, po prostu naciśnij, C-g
aby odwrócić kierunek. Będziesz musiał cofnąć całą drogę przez przypadkowe powtórzenia i cofnięcia, zanim dojdziesz do cofnięć, które chcesz, ale jeśli nadal C-/
będziesz naciskać , w końcu osiągniesz pożądany stan. W rzeczywistości każdy stan, w którym kiedykolwiek był bufor, jest osiągalny, jeśli uderzysz C-g
raz, a następnie naciskasz C-/
wystarczająco dużo razy.
Alternatywne skróty undo
, inne niż C-/
są C-_
, C-x u
i M-x
undo
.
Zobacz Cofnij w Podręczniku Emacsa, aby uzyskać więcej informacji na temat systemu cofania Emacsa.
Dla tych, którzy chcą mieć bardziej powszechną funkcję cofania / ponawiania, ktoś napisał undo-tree.el
. Zapewnia wygląd cofania nie Emacsa, ale zapewnia dostęp do całego „drzewa” cofania historii.
Lubię wbudowany system cofania Emacsa, ale uważam ten pakiet za bardzo intuicyjny.
Oto komentarz z samego pliku:
Emacs ma potężny system cofania. W przeciwieństwie do standardowego systemu cofania / ponawiania w większości programów, pozwala on odzyskać dowolny wcześniejszy stan bufora (podczas gdy standardowy system cofania / ponawiania może utracić przeszłe stany zaraz po ponownym wykonaniu). Jednak ta moc ma swoją cenę: wiele osób uważa system cofania Emacsa za mylący i trudny w użyciu, tworząc wiele pakietów, które zastępują go mniej wydajnym, ale bardziej intuicyjnym systemem cofania / ponawiania.
Zarówno utrata danych ze standardowym cofaniem / ponawianiem, jak i pomieszanie cofania Emacsa, wynikają z próby traktowania historii cofnięć jako liniowej sekwencji zmian. To nie jest. „Tryb cofania drzewa” udostępniany przez ten pakiet zastępuje system cofania Emacsa systemem, który traktuje historię cofania tak, jak jest: rozgałęzionym drzewem zmian. Ten prosty pomysł pozwala na bardziej intuicyjne zachowanie standardowego systemu cofania / ponawiania w połączeniu z mocą nigdy nie tracącej historii. Dodatkową korzyścią dodatkową jest to, że historia cofania może być w niektórych przypadkach bardziej efektywnie przechowywana, umożliwiając gromadzenie większej liczby zmian, zanim Emacs zacznie usuwać historię.
Strzeż się dziwnego cofania drzewa w celu ponownego wykonania !
Wiele popularnych „zestawów startowych” (preludium, purcell, spacemacs) jest dostarczanych w pakiecie z cofaniem drzewa. Większość (wszystkich?) Nawet włącza go automatycznie. Jak wspomniano, cofnij drzewo jest wygodnym sposobem na wizualizację i przejście przez drzewo cofania / ponawiania. Preludium daje nawet klawisz-akord ( uu
), a także C-x u
.
Problem polega na tym: cofanie drzewo wydaje się zniszczyć domyślne Emacs i znany wiążący dla redo :C-g C-/
.
Zamiast tego możesz użyć tych symetrycznych klawiszy do cofania / ponawiania :
C-/ undo
C-S-/ redo
Są one przydatne, ponieważ czasami chcesz szybko powtórzyć bez otwierania wizualizatora.
Uważam, że jest to szczególnie redo.el
przydatne do wykonywania „normalnych” operacji cofania / przywracania i zwykle wiążę to z CSz, a cofam z Cz, w następujący sposób:
(when (require 'redo nil 'noerror)
(global-set-key (kbd "C-S-z") 'redo))
(global-set-key (kbd "C-z") 'undo)
Wystarczy pobrać plik, umieścić go na ścieżce lisp i wkleić powyższe w swoim .emacs
.
Domyślnie ponawianie w Emacsie wymaga naciśnięcia Cg, a następnie cofnięcia.
Jednak możliwe jest użycie wbudowanego cofania Emacsa, aby zaimplementować polecenie ponawiania.
Pakiet cofnij-fu , wykorzystuje wbudowaną funkcję cofania Emacsa, aby ujawnić zarówno cofanie, jak i ponawianie.