Emacs:获取可读的键盘宏

Emacs:获取可读的键盘宏,emacs,keyboard,macros,lisp,Emacs,Keyboard,Macros,Lisp,使用insert kbd macro保存命名键盘宏时,我会得到“不可读”的Lisp代码,如 (fset 'ppsql (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([134217788 134217765 44 return 44 17 10 return 33 134217765 102 102 backspace 114 111 109 ret

使用
insert kbd macro
保存命名键盘宏时,我会得到“不可读”的Lisp代码,如

(fset 'ppsql
   (lambda (&optional arg) "Keyboard macro." (interactive "p") (kmacro-exec-ring-item (quote ([134217788 134217765 44 return 44 17 10 return 33 134217765 102 102 backspace 114 111 109 return 17 10 102 111 109 backspace backspace 114 111 return 33] 0 "%d")) arg)))
我想要以下的东西:

(fset 'move-line-down
      [?\C-a ?\C-k delete down ?\C-y return up])
IIRC I使用相同的方法记录、命名和插入两个键盘宏:F3、F4、
name last kbd macro


是否可以以可读的格式获取第一个宏?

我从未见过第一个格式。第二种形式是我习惯的。您是否尝试重新录制第一个宏以查看如果确定先录制,然后命名,然后插入,会发生什么情况


另一个要尝试的是“C-X(”,它调用kmacro开始宏和“C-X)”kmacro结束宏,而不是F3/F4,它们在做一些与保留计数器无关的事情。也许更简单的键盘宏命令可以更直接地工作。

Emacs中的键盘宏功能有两种模式:
macros
kmacros
。前者以您喜欢的符号形式返回宏,后者提供lambda形式。因此,如果您调用
name last kbd macro
您会得到一个符号表单,如果您调用
kmacro name last macro
,您会得到一个lambda表单。

谢谢

因此,宏的命名决定了插入时的格式

我做了更多的实验,发现
M-x insert kbd macro RET RET
会给我“符号形式”

M-x insert kbd macro RET pp2sql RET
给出了“labmda表单”(在使用
name last kbd macro
命名之后)


现在我意识到在我之前的实验中我一直在使用
name last kbd macro
。?

当您检查
kmacro name last macro
C-h f kmacro name last macro
)的函数定义时,您将在最后一行中看到,它在宏上调用了
kmacro lambda form
,这就是为什么会得到lambda表单。(下次最好编辑您的问题,然后发布新答案。)