Часто я копался в apropos и docs, ища что-то вроде следующего, только чтобы отказаться, чтобы вернуться к текущей задаче:
(повторить последнюю команду)
выполните последнюю команду C- или M-, которую я только что выполнил (для повторной привязки к клавише fn)
или иногда связанные:
(описать последнюю функцию)
какое нажатие клавиши я сделал по ошибке, эффект от которого я хотел бы добавить в свой набор трюков. description-key близок, но требует знания того, что я набрал.
Я просто слишком многого прошу от своего верного друга?





Функциональность повтора обеспечивается пакетом repeat.el Emacs Lisp, который включен в стандартные дистрибутивы Emacs. Из документации repeat.el:
This package defines a command that repeats the preceding command, whatever that was, including its arguments, whatever they were. This command is connected to the key C-x z. To repeat the previous command once, type C-x z. To repeat it a second time immediately after, type just z. By typing z again and again, you can repeat the command over and over.
Чтобы увидеть дополнительную информацию о команде повтора, введите C-h F repeat RET из Emacs.
Я не совсем уверен, но, может быть, вы ищете это?
The command C-xz (
repeat) provides another way to repeat an Emacs command many times. This command repeats the previous Emacs command, whatever that was. Repeating a command uses the same arguments that were used before; it does not read new arguments each time.
Руководство по Emacs, 8.11 Повторение команды
и, как отметил Йоханнес Шауб, последующие нажатия только z сами по себе будут продолжать повторение.
Что касается 'описать последнюю функцию':
Существует переменная last-command, в которой установлен символ, представляющий последнее, что вы сделали. Таким образом, этот фрагмент elisp - (describe-function last-command) - должен вызвать документацию по тому, что произошло немедленно.
Итак, вы можете сделать тривиальный рабочий describe-last-function вот так
(defun describe-last-function()
(interactive)
(describe-function last-command))
Поместите этот elisp в .emacs или аналогичный, и у вас будет M-x описать последнюю функцию.
Если вы нажали несколько клавиш или сделали что-то такое, что изменило last-command с момента, в котором вы заинтересованы, функция command-history может вас заинтересовать. Вы можете получить это M-x история команд
C-xz
После того, как вы ее нажали, просто нажмите только z после этого он повторится (без повторного нажатия C-x).
Именно то, что я ожидал от него.
Кроме того, M-x view-lossage показывает последние сто (?) Нажатий клавиш, которые вы ввели. Итак, вы сможете увидеть, где находится команда. Это то, что я использовал до тех пор, пока прямо сейчас не узнал о M-x command-history, который, я думаю, сейчас буду использовать с C-h w.
Да, есть команда повторить. Он называется repeat:
Немного шокирует никто не упомянул repeat-complex-command, доступный из привязки ключей C-xESCESC.
аналогичен M-x M-p, за исключением того, что команда repeat-complex повторяет предыдущие аргументы.
Также на C-x M-: (мнемоника: как M-:, но с уже введенным выражением elisp).
Да, действительно шокирует. Принятый ответ - нет - лучший ответ здесь, IMO (но OP, по-видимому, считает, что он лучше всего соответствует ее вопросу). Для меня этот ответ наиболее близок к тому, что был задан в письменном вопросе (повторить последнюю команду). И возможности, предлагаемые repeat.el (который включает в себя C-x z z z...), являются вторыми ближайшими. На второй заданный вопрос о том, какие нажатия клавиш были нажаты последними, лучший ответ - C-h l (view-lossage). ИМХО, от команды describe-last-command мало толку.
Вы также можете использовать C-x M-: как часть макроса клавиатуры, что может быть удобно. Привязки repeat-complex-command по умолчанию слишком громоздки, чтобы набирать их снова и снова.
Может, это тоже поможет ... Из справки 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.
Лично я нашел идею Себастьяна полезной. Вот рабочая версия
(global-set-key "\C-r" #'(lambda () (interactive)
(eval (car command-history))))
Учитывая, что isearch и isearch-backward являются важными командами навигации, и что последняя привязана к <kbd> C-r </kbd> по умолчанию, вероятно, можно было бы найти лучшую привязку для repeat-command. На Mac я бы предложил Command (super) -Y, поскольку в некоторых приложениях уже есть соглашение об использовании этого параметра как противоположности «отменить».
Это старое слово, но Google сначала публикует его, когда я хотел получить последнюю команду, которую я набрал в командной строке Emacs. Ни один из этих ответов не сработал для меня, поэтому я решил вложить свои два цента для тех, кто может наткнуться на это позже, как и я. Я использую Portacle, но я нашел то, что искал, в здесь, поэтому я надеюсь, что он достаточно универсален, чтобы работать с различными настройками. В любом случае, у меня сработало использование C-↑ и C-↓ для циклического просмотра истории. Использование M-p и M-n также сработало, но я предпочитаю использовать стрелки, так как я довольно часто использую Bash.
точечный режим - это способ повторить последнюю команду (и).
Из его комментария:
It emulates the vi `redo' command, repeating the immediately preceding sequence of commands. This is done by recording input commands which change the buffer, i.e. not motion commands.
C-x z
(repeat)и C-x M-z(repeat-complex-command). См. Также(repeat-matching-complex-command).