是的,有一种方法可以将先前定义的宏添加到宏环中,以便您可以使用 kmacro-step-edit-macro 对其进行编辑:
想象一下,您使用 命名了一个键盘宏 tata name-last-kbd-macro
,并insert-kbd-macro
为 tata 做了一个。例如 :
(fset 'tata
[return return ?f ?o ?o return])
您可以将此宏定义存储到您的 .emacs 中以供以后使用。在新的 emacs 会话中,您可以使用以下 lisp 代码将宏放回 kmacro-ring :
(kmacro-push-ring (list 'tata 0 "%d"))
(kmacro-pop-ring)
之后,您可以kmacro-step-edit-macro
对其进行操作。
如果您使用kmacro-name-last-macro
而不是命名宏name-last-kbd-macro
,则调用insert-kbd-macro
将为您的宏插入不同的定义,使用 lambda 函数而不是向量或字符串(以便能够存储当前计数器),例如:
(fset 'tata
(lambda (&optional arg) "Keyboard macro." (interactive "p")
(kmacro-exec-ring-item
(quote ([return return 102 111 111 return] 0 "%d")) arg)))
在这种情况下,kmacro-step-edit-macro
会引发错误,因为这不是向量或字符串。要解决此问题,您可以: