在批处理模式下运行emacs键盘宏
我希望能够在emacs中保存键盘宏,并在批处理模式下重复将其应用于文件。为了给出一个简单的例子,我创建了以下文件paren-delete.el,它应该删除所有括号及其内容。当我运行emacs--batch target.txt--load paren-delete.el时,似乎什么都没有改变。看起来只有第一个kbd函数完成了它应该做的事情,所以很明显我不理解这个命令是如何工作的 我知道最好避免使用键盘宏,并用适当的elisp编写函数,但我更喜欢一个快速而肮脏的解决方案,我觉得我已经接近了在批处理模式下运行emacs键盘宏,emacs,elisp,Emacs,Elisp,我希望能够在emacs中保存键盘宏,并在批处理模式下重复将其应用于文件。为了给出一个简单的例子,我创建了以下文件paren-delete.el,它应该删除所有括号及其内容。当我运行emacs--batch target.txt--load paren-delete.el时,似乎什么都没有改变。看起来只有第一个kbd函数完成了它应该做的事情,所以很明显我不理解这个命令是如何工作的 我知道最好避免使用键盘宏,并用适当的elisp编写函数,但我更喜欢一个快速而肮脏的解决方案,我觉得我已经接近了 (kb
(kbd "M-x load-library kmacro")
(fset 'delete-paren
(lambda (&optional arg) "Keyboard macro." (interactive "p")
(kmacro-exec-ring-item (quote ("^S(^M^B^@^[^N^W" 0 "%d")) arg)))
(start-kbd-macro nil)
(kbd "M-x delete-paren")
(end-kbd-macro)
(kbd "C-u 0 C-x e")
(save-buffer)
一个答案:
(defun foo()
M-x插入kbd宏RET
现在您有了此文本,但键盘宏的定义取代了XXXXX
:
(defun foo()(setq last kbd宏XXXXX)
setq last kbd macro
替换为execute kbd macro
,并添加一个最终的)
:
(defun foo()(执行kbd宏XXXXX)
C-x C-e
,或在定义内的任何位置使用C-M-x
这定义了函数foo
,它与键盘宏所做的一样(在相同的上下文中,例如,相同的模式,所以相同的键绑定)
()
之后添加(交互式)
,使其成为命令,以便将其与M-x
一起使用
C-u M-x bmkp make function bookmark
从上一个键盘宏创建书签。系统会提示您输入书签名称
书签是持久的。若要在批处理模式下使用书签,请将其作为书签跳转
的参数调用,如下所示:(bookmark jump THE-bookmark-NAME)