Есть ли в Emacs команда (repeat-last-command)?

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

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

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

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

(описать последнюю функцию)

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

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

C-x z (repeat) и C-x M-z (repeat-complex-command). См. Также (repeat-matching-complex-command).

Hatshepsut 01.05.2018 12:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
148
1
40 522
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Функциональность повтора обеспечивается пакетом 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 сами по себе будут продолжать повторение.

phils 15.11.2011 04:17
Ответ принят как подходящий

Что касается 'описать последнюю функцию':

Существует переменная 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).

Именно то, что я ожидал от него.

Vasantha Ganesh 21.05.2019 10:58

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

Да, есть команда повторить. Он называется repeat:

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

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

аналогичен M-x M-p, за исключением того, что команда repeat-complex повторяет предыдущие аргументы.

Yoo 20.10.2009 13:42

Также на C-x M-: (мнемоника: как M-:, но с уже введенным выражением elisp).

phils 28.01.2013 02:29

Да, действительно шокирует. Принятый ответ - нет - лучший ответ здесь, IMO (но OP, по-видимому, считает, что он лучше всего соответствует ее вопросу). Для меня этот ответ наиболее близок к тому, что был задан в письменном вопросе (повторить последнюю команду). И возможности, предлагаемые repeat.el (который включает в себя C-x z z z...), являются вторыми ближайшими. На второй заданный вопрос о том, какие нажатия клавиш были нажаты последними, лучший ответ - C-h l (view-lossage). ИМХО, от команды describe-last-command мало толку.

Drew 27.01.2014 03:05

Вы также можете использовать C-x M-: как часть макроса клавиатуры, что может быть удобно. Привязки repeat-complex-command по умолчанию слишком громоздки, чтобы набирать их снова и снова.

remcycles 30.12.2018 00:34

Может, это тоже поможет ... Из справки 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, поскольку в некоторых приложениях уже есть соглашение об использовании этого параметра как противоположности «отменить».

Brighid McDonnell 19.06.2012 23:01

Это старое слово, но Google сначала публикует его, когда я хотел получить последнюю команду, которую я набрал в командной строке Emacs. Ни один из этих ответов не сработал для меня, поэтому я решил вложить свои два цента для тех, кто может наткнуться на это позже, как и я. Я использую Portacle, но я нашел то, что искал, в здесь, поэтому я надеюсь, что он достаточно универсален, чтобы работать с различными настройками. В любом случае, у меня сработало использование C-&uparrow; и C-&downarrow; для циклического просмотра истории. Использование 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.

Другие вопросы по теме