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表单。(下次最好编辑您的问题,然后发布新答案。)