Есть ли в Emacs (повтор-последняя команда)?

Зачастую я врывался в apropos и docs, чтобы найти что-то вроде следующего, чтобы отказаться от возврата к задаче:

(повтор последней команды)

выполните последнюю команду C или M, которую я только что выполнил (чтобы вернуться к клавише fn)

или иногда связанных:

(описывают-последний-функции)

какое нажатие клавиши я просто ошибочно выдает, эффект, который я хотел бы добавить в свою сумку трюков. описание-ключ близок, но требует знания того, что я набрал.

Я просто спрашиваю слишком много от моего надежного приятеля?

Ответ 1

в отношении описать-последнюю-функцию:

Здесь есть переменная last-command, которая задана символом, представляющим последнее, что вы делали. Итак, этот фрагмент elisp - (describe-function last-command) - должен привести документацию о том, что произошло немедленно.

Таким образом, вы можете сделать тривиальную работу describe-last-function, например,

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

Поместите этот elisp в .emacs или его эквивалент, и у вас будет описательная функция -M-x.

Если вы ударили по нескольким клавишам или сделали что-то, что изменило последнюю команду, так как вы заинтересованы, функция command-history может представлять интерес. Вы можете получить это командой M-x command-history

Ответ 2

Функция повтора предоставляется пакетом repeat.el Emacs Lisp, который включен в стандартные дистрибутивы Emacs. Из документации repeat.el:

Этот пакет определяет команду, которая повторяет предыдущую команду, что бы это ни было, включая его аргументы, какими бы они ни были. Эта команда подключена к ключу C-x z. Чтобы повторить предыдущую команду один раз, тип C-x z. Повторить это второй раз сразу после, type только z. От вводя z снова и снова, вы можете повторите команду снова и снова.

Чтобы просмотреть дополнительную информацию о команде повтора, введите C-h F repeat RET из Emacs.

Ответ 3

Повторить последнюю команду

C-x z

Как только вы нажали, просто нажмите только z после этого и повторится (без повторного нажатия C-x).

Ответ 4

Вы можете повторять команды с помощью C-x z и нажать z, чтобы продолжать повторять.

Немного шокирующий никто не упомянул repeat-complex-command, доступный из привязки ключей C-x ESC ESC.

Ответ 5

Кроме того, M-x view-lossage показывает вам последние сотни (?) нажатых клавиш. Таким образом, вы сможете увидеть, где находится команда. Это то, что я использовал до тех пор, пока я только сейчас не узнал о M-x command-history, который, я думаю, теперь буду использовать с C-h w.

Ответ 6

Я не уверен, но, возможно, вы ищете этот?

Команда C-x z (repeat) предоставляет другой способ повторить Команда Emacs много раз. Эта команда повторяет предыдущие Emacs команда, что бы это ни было. Повторение команды использует те же аргументы которые использовались раньше; он не читает новые аргументы каждый раз.

Руководство Emacs, 8.11 Повторение команды

Ответ 7

Возможно, это тоже помогло бы... Из emacs Справка стенографически:

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.

Ответ 8

Лично я нашел идею Себастьяна полезной. Вот рабочая версия

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