在Emacs中调用宏内部的宏

时间:2010-01-14 12:37:09

标签: emacs macros

我不知道如何调用另一个宏内的宏来避免内部宏的铃声停止,因为这会停止外部宏。特别是,我必须进行两次搜索,并且我已经定义了一个宏,另一个必须搜索一些文件夹并在每个文件夹中调用内部宏,但外部宏在内部响铃停止后无法继续宏。

任何解决方案?

谢谢!

2 个答案:

答案 0 :(得分:1)

可能有一种方法可以通过修改或研究isearch的行为来实现,但最好的办法是在Lisp中编写内部循环并将外部循环作为宏运行(或者在Lisp中编写它)。宏观系统很棒,但它的功率有限,听起来你正在尝试做一些比它能够处理的功能更强大的功能(很容易)。

根据您正在做的事情,您也可以在regexp替换的替换字符串中使用Lisp表达式。从GNU Emacs 22开始,您可以通过使用“\,”转义替换字符串中的Lisp表达式。

我确信有一种方法可以实现你的要求(毕竟它是Emacs),但它可能比它的价值更麻烦。

答案 1 :(得分:0)

我终于找到了解决方案:

我有一个宏'a1'调用宏'etat'直到找到错误(使用C-u 0)

(fset 'a1
   [escape ?< ?\C-u ?0 escape ?x ?e ?t ?a ?t return ])

macro etat:

(fset 'etat
   [?\C-s ?I ?n ?i ?t ?i ?a ?l ?  ?S ?t ?a ?t ?e C-right C-left ?\C-  ?\C-a ?\C-w ?< ?e ?t ?a ?t ?> return ?\C-s ?( left backspace ?\C-k ?\C-a ?\C-s ?I ?n ?i ?t ?i ?a ?l ?  ?S ?t ?a ?t ?e ?\C-a return up ?< ?/ ?e ?t ?a ?t ?> ?\C-a down])