Czy w Emacsie jest (powtórz ostatnie polecenie)?


143

Często zagłębiałem się w apropos i doktorów, szukając czegoś podobnego do poniższego, tylko po to, aby się poddać, aby wrócić do zadania:

(powtórz ostatnie polecenie)

wykonaj ostatnie polecenie C lub M, które właśnie wykonałem (aby powrócić do klawisza fn)

lub czasami powiązane:

(opisz ostatnią funkcję)

jakie naciśnięcie klawisza właśnie omyłkowo wydałem, efekt którego chciałbym dodać do mojej torby sztuczek. Opis-klucz jest bliski, ale wymaga znajomości tego, co wpisałem.

Czy po prostu żądam zbyt wiele od mojego zaufanego pomocnika?


1
Cx zi (repeat)Cx Mz (repeat-complex-command). Zobacz także (repeat-matching-complex-command).
Hatszepsut

Odpowiedzi:


62

w odniesieniu do „ opisz ostatnią-funkcję ”:

Istnieje zmienna, last-commandktóra jest ustawiona na symbol reprezentujący ostatnią rzecz, którą zrobiłeś. Więc ten fragment elisp -(describe-function last-command) kodu - powinien wywołać dokumentację tego, co wydarzyło się natychmiast.

Więc możesz zrobić trywialne działanie w ten describe-last-functionsposób

(defun describe-last-function() 
  (interactive) 
  (describe-function last-command))

Umieść ten elisp .emacslub jego odpowiednik, a otrzymasz funkcję Mx opisującą ostatnią .

Jeśli uderzyłeś w kilka klawiszy lub zrobiłeś coś, co zmodyfikowało ostatnią komendę od rzeczy, która Cię interesuje, command-historyfunkcja może być interesująca. Możesz to uzyskać dzięki historii poleceń Mx


168

Funkcjonalność powtarzania jest dostarczana przez repeat.elpakiet Emacs Lisp, który jest zawarty w standardowych dystrybucjach Emacsa. Z repeat.eldokumentacji:

Ten pakiet definiuje polecenie, które powtarza poprzednie polecenie, cokolwiek to było, w tym jego argumenty, cokolwiek to było. To polecenie jest połączone z klawiszem Cx z. Aby raz powtórzyć poprzednie polecenie, wpisz Cx z. Aby powtórzyć to natychmiast po raz drugi, wpisz po prostu z. Naciskając wielokrotnie z, możesz powtarzać polecenie w kółko.

Aby zobaczyć dodatkowe informacje o poleceniu powtarzania, wpisz C-h F repeat RETz poziomu Emacsa.



81

Tak, istnieje polecenie powtarzania . Nazywa się repeat:

  • Możesz powtarzać polecenia za pomocą C-x zi zwciskać, aby je powtarzać.

Trochę szokujące, nikt nie wymienił repeat-complex-command, dostępny z oprawy klawiszowej C-x ESC ESC.


2
podobny do Mx Mp z tą różnicą, że polecenie powtarzania złożonego powtarza poprzednie argumenty.
Yoo

5
Również włączony C-x M-:(mnemonik: jak, M-:ale z elispowym wyrażeniem już wypełnionym).
phils

6
Tak, rzeczywiście szokujące . Przyjęta odpowiedź nie jest tutaj najlepszą odpowiedzią, IMO (ale OP najwyraźniej uważa, że ​​najlepiej odpowiada jej pytaniu). Dla mnie ta odpowiedź jest najbliższa temu, o co zadano pytanie pisemne (powtórz ostatnią komendę). A możliwości, jakie daje repeat.el(które podpiera C-x z z z...), są drugie najbliższe. Na drugie pytanie zadane, o które klawisze zostały naciśnięte jako ostatnie, najlepszą odpowiedzią jest C-h l( view-lossage). Nie ma pożytku, IMHO, dla describe-last-commandpolecenia.
Drew

Możesz również użyć C-x M-:jako części makra klawiatury, co może być przydatne. Domyślne repeat-complex-commandpowiązania są trochę zbyt uciążliwe, aby można je było wielokrotnie pisać.
przeróbki

24

Również, M-x view-lossage pokazuje ostatnie sto (?) Naciśnięcia klawiszy wprowadzony. Będziesz więc mógł zobaczyć, gdzie jest polecenie. To jest to, czego używałem, dopóki nie dowiedziałem się, o M-x command-historyczym myślę, że będę C-h wteraz używał .


18

Nie jestem pewien, ale może szukasz tego?

Polecenie C-xz( repeat) zapewnia inny sposób wielokrotnego powtarzania polecenia Emacsa. To polecenie powtarza poprzednie polecenie Emacsa, cokolwiek to było. Powtarzanie polecenia wykorzystuje te same argumenty, które były używane wcześniej; nie czyta nowych argumentów za każdym razem.

Podręcznik Emacsa, 8.11 Powtarzanie polecenia


2
i jak zauważył Johannes Schaub, kolejne naciśnięcia zsame w sobie będą kontynuować powtarzanie.
phils

9

Może to też by pomogło ... Od emacs Help dosłownie:

C-x M-ESC runs the command repeat-complex-command
  which is an interactive compiled Lisp function in `simple.el'.
It is bound to <again>, <redo>, C-x M-:, C-x M-ESC.
(repeat-complex-command ARG)

Edit and re-evaluate last complex command, or ARGth from last.
A complex command is one which used the minibuffer.
The command is placed in the minibuffer as a Lisp form for editing.
The result is executed, repeating the command as changed.
If the command has been changed or is not the most recent previous command
it is added to the front of the command history.
You can use the minibuffer history commands M-n and M-p
to get different commands to edit and resubmit.

4

Osobiście uznałam pomysł Sebastiana za przydatny. Oto działająca wersja

(global-set-key "\C-r" #'(lambda () (interactive)
                                 (eval (car command-history))))

2
Biorąc pod uwagę, że isearchi isearch-backwardsą ważne polecenia nawigacyjne, i że ten ostatni jest zobowiązany do <kbd> Cr </ kbd> domyślnie, można prawdopodobnie znaleźć lepsze wiążące dla wielokrotnych polecenia. Na komputerze Mac sugerowałbym Command (super) -Y, ponieważ niektóre aplikacje mają już konwencję używania tego jako przeciwieństwa „cofnij”.
Brighid McDonnell

0

To jest stare, ale Google wyskakuje jako pierwszy, gdy szukałem ostatniego polecenia, które wpisałem w zachęcie Emacsa. Żadna z tych odpowiedzi nie zadziałała dla mnie, więc zdecydowałem się przeznaczyć moje dwa centy dla tych, którzy mogą się na to natknąć później, tak jak ja. Używam Portacle, ale znalazłem tutaj to, czego szukałem , więc mam nadzieję, że jest wystarczająco ogólny, aby pracować z różnymi konfiguracjami. W każdym razie to, co zadziałało, to używanie C-↑i C-↓cykliczne przechodzenie przez historię. Używałem M-pi również M-ndziałało, ale wolę używać strzałek, ponieważ często używam Bash.

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.