Emacs Lisp宏步进

时间:2011-05-08 03:53:16

标签: emacs macros elisp

SLIME macrostepper是否有Elisp模拟?具体来说,我正在寻找能够在新缓冲区中将代码扩展到下一个扩展步骤(或者只是最终扩展)的东西。

天真的

(defun macroexpand-point ()
  (interactive)
  (let ((b (get-buffer-create "*el-macroexpansion*"))
        (expansion (format "%s" (macroexpand (thing-at-point 'sexp)))))
    (with-current-buffer b
      (insert expansion)
      (display-buffer b))))

没有做我期待的事情。

3 个答案:

答案 0 :(得分:6)

也许你需要这个:

(defun macroexpand-sexp-at-point ()
  (macroexpand (sexp-at-point)))

整个功能可以更加简洁地表达

(defun macroexpand-point (sexp)
  (interactive (list (sexp-at-point)))
  (with-output-to-temp-buffer "*el-macroexpansion*"
    (pp (macroexpand sexp)))
  (with-current-buffer "*el-macroexpansion*" (emacs-lisp-mode)))

答案 1 :(得分:3)

您可能会发现imacroexpand.el符合您的要求。

答案 2 :(得分:2)

有人可能会发现macrostep package很有用。

macrostep上的快速指南:

安装软件包后,如果没有进一步的自定义,您可以这样做:

在要展开的表达式之前移动光标,然后执行M-x macrostep-expand e e e e e以逐步展开它。在echo区域中显示关于如何退出以及如何进行扩展的简短帮助消息。

可以对来自dash.el page->>宏示例进行测试,这些示例不是太简单且不太复杂。