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

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

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

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

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

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

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

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


person ack    schedule 09.11.2008    source источник
comment
C-x z (repeat) и C-x M-z (repeat-complex-command). См. Также (repeat-matching-complex-command).   -  person Hatshepsut    schedule 01.05.2018


Ответы (10)


Что касается "description-last-function":

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

Итак, вы могли бы сделать тривиальную работу describe-last-function вот так

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

Поместите этот elisp в .emacs или эквивалент, и вы получите M-x describe-last-function.

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

person cms    schedule 09.11.2008

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

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

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

person Emerick Rogul    schedule 09.11.2008

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

C-x z

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

person Johannes Schaub - litb    schedule 09.11.2008
comment
Именно то, что я ожидал от него. - person Vasantha Ganesh; 21.05.2019

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

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

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

person ashawley    schedule 09.03.2009
comment
аналогичен M-x M-p, за исключением того, что команда repeat-complex повторяет предыдущие аргументы. - person Yoo; 20.10.2009
comment
Также на C-x M-: (мнемоника: как M-:, но с уже заполненным выражением elisp). - person phils; 28.01.2013
comment
Да, действительно шокирует. Принятый ответ - это не лучший ответ здесь, ИМО (но OP, по-видимому, считает, что он лучше всего соответствует ее вопросу). Для меня этот ответ наиболее близок к тому, что был задан в письменном вопросе (повторить последнюю команду). И возможности, предлагаемые repeat.el (который включает C-x z z z...), являются вторыми ближайшими. На второй заданный вопрос о том, какие нажатия клавиш были нажаты последними, лучший ответ - C-h l (view-lossage). ИМХО, от команды describe-last-command мало толку. - person Drew; 27.01.2014
comment
Вы также можете использовать C-x M-: как часть макроса клавиатуры, что может быть удобно. Привязки по умолчанию repeat-complex-command слишком громоздки, чтобы набирать их снова и снова. - person remcycles; 30.12.2018

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

person quodlibetor    schedule 09.11.2008

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

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

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

person echox    schedule 09.11.2008
comment
и, как заметил Йоханнес Шауб, последующие нажатия только z сами по себе продолжат повторение. - person phils; 15.11.2011

Может быть, это тоже поможет ... Из справки 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.
person Murali VP    schedule 14.11.2009

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

(global-set-key "\C-r" #'(lambda () (interactive)
                                 (eval (car command-history))))
person sabof    schedule 12.11.2011
comment
Учитывая, что isearch и isearch-backward являются важными командами навигации, и что последняя привязана к ‹kbd› C-r ‹/kbd› по умолчанию, вероятно, можно было бы найти лучшую привязку для repeat-command. На Mac я бы предложил Command (super) -Y, поскольку в некоторых приложениях уже есть соглашение об использовании этого параметра как противоположности «отменить». - person Brighid McDonnell; 19.06.2012

Это старое слово, но Google сначала публикует его, когда я хотел получить последнюю команду, которую я ввел в командной строке Emacs. Ни один из этих ответов не сработал для меня, поэтому я решил вложить свои два цента для тех, кто может наткнуться на это позже, как и я. Я использую Portacle, но нашел то, что искал, в здесь, поэтому я надеюсь, что он достаточно универсален, чтобы работать с разными настройками. В любом случае, у меня сработало использование C- и C- для циклического просмотра истории. Использование M-p и M-n также работало, но я предпочитаю использовать стрелки, так как я довольно часто использую Bash.

person Doug F    schedule 29.05.2019

точечный режим - это способ повторить последнюю команду (и).

Из его комментария:

Он имитирует команду vi `redo ', повторяя непосредственно предшествующую последовательность команд. Это делается путем записи команд ввода, которые изменяют буфер, т. Е. Не команд движения.

person Micah Elliott    schedule 04.11.2020