Emacs中是否有(repeat-last-command)?


143

通常,我会深入研究apropos和docs,寻找类似以下内容的内容,只是为了放弃手头的任务而放弃:

(repeat-last-command)

执行我刚刚执行的最后一个C-或M-命令(将其反弹到fn键)

或有时相关:

(描述最后一个功能)

我只是错误地发出了什么按键,我想将其效果添加到我的技巧包中。describe-key很接近,但是需要知道我输入的内容。

我只是向我可信赖的伙伴问了太多吗?


1
Cx z (repeat)和Cx Mz (repeat-complex-command)。另请参阅(repeat-matching-complex-command)
哈特谢普苏特

Answers:


62

关于' describe-last-function ':

有一个变量last-command设置为代表您所做的最后一件事情的符号。因此,这个elisp片段- (describe-function last-command)应该提起立即发生的事情的文档。

这样您就可以describe-last-function像这样简单地工作

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

放入elisp .emacs或等效名称,您将获得Mx describe-last-function

如果您自感兴趣以来就敲了几个键或做了一些修改了last-command的操作,则该command-history功能可能很有趣。您可以通过Mx命令历史记录来获取


168

repeat.elEmacs Lisp软件包提供了重复功能,该软件包包含在标准Emacs发行版中。从repeat.el的文档:

该程序包定义了一个命令,该命令将重复先前的命令,无论该命令是什么(包括其参数)都是什么。此命令已连接到键Cx z。要一次重复上一个命令,请键入Cx z。要立即重复第二遍,请仅输入z。通过一次又一次输入z,您可以一遍又一遍地重复该命令。

要查看有关repeat命令的更多信息,请C-h F repeat RET在Emacs中键入。



81

是的,有一个重复命令。叫做repeat

  • 您可以使用来重复命令C-x z,然后点击z以保持重复。

repeat-complex-command钥匙绑定中没有人提到,这有点令人震惊C-x ESC ESC


2
与Mx Mp相似,不同之处是repeat-complex-command重复先前的参数。
Yoo

5
还在C-x M-:(助记符:类似,M-:但已经为您填充了elisp表达式)。
phils 2013年

6
是的,确实令人震惊。IMO,在这里接受的答案不是最好的答案(但OP显然认为它最适合她的问题)。对我来说,这个答案最接近书面问题的要求(重复最后一个命令)。repeat.el(由包含C-x z z z...)提供的可能性第二近。问第二个问题,关于最后一次击键是哪个,最好的答案是C-h lview-lossage)。恕我直言,describe-last-command命令几乎没有用。
Drew

您也可以将其C-x M-:用作键盘宏的一部分,这很方便。默认repeat-complex-command绑定有点麻烦,无法一遍又一遍地键入。
回收

24

此外,还会M-x view-lossage显示您输入的最后一百次击键。这样,您将可以看到命令的位置。这是我一直使用的,直到我现在才知道我现在M-x command-history将要使用的内容C-h w


18

我不太确定,但也许您正在搜索这个?

命令C-xzrepeat)提供了多次重复Emacs命令的另一种方法。该命令将重复先前的Emacs命令,无论该命令是什么。重复命令使用与以前相同的参数。它不会每次都读取新的参数。

Emacs手册,8.11重复命令


2
并且正如约翰内斯·绍布(Johannes Schaub)所指出的那样,后续的新闻出版z将继续自己的重复。
phils

9

也许这也会有所帮助...来自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.

4

我个人认为塞巴斯蒂安的想法很有用。这是一个工作版本

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

2
考虑到isearchisearch-backward是重要的导航命令,并且默认情况下将后者绑定到<kbd> Cr </ kbd>,因此人们可能会发现重复命令的更好绑定。在Mac上,我建议使用Command(super)-Y,因为某些应用程序已经约定将其用作与“ undo”相反的约定。
Brighid McDonnell '19

0

这很旧,但是当我想要检索在Emacs提示符下键入的最后一个命令时,Google pops首先将其发布。这些答案对我都不起作用,因此我决定为那些可能后来像我一样偶然发现此问题的人投入2美分。我正在使用Portacle,但在这里找到了我想要的东西,所以我希望它足够通用,可以与其他设置一起使用。无论如何,对我有用的是使用历史C-↑C-↓在历史中循环。使用M-p和都M-n工作得很好,但是我更喜欢使用箭头,因为我经常使用Bash。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.