【问题标题】:Emacs Lisp macro stepperEmacs Lisp 宏步进器
【发布时间】:2011-08-20 23:53:01
【问题描述】:

是否有用于 SLIME 宏步进器的 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))))

不符合我的预期。

【问题讨论】:

  • 出于好奇,这究竟是做什么的?在宏步进器上真的找不到任何东西
  • @Dualinity - 它采用 elisp 宏调用,并向您显示它在临时缓冲区中扩展的代码。如果这仍然没有意义,您可能需要阅读macros in Lisp

标签: emacs macros elisp


【解决方案1】:

也许你需要这个:

(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)))

【讨论】:

    【解决方案2】:

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

    宏步快速操作方法:

    安装包后,无需进一步定制,您可以这样做:

    将光标移到要展开的表达式前,然后执行M-x macrostep-expand e e e e e 逐步展开。在回显区域中会显示有关如何退出和如何展开的简短帮助消息。

    可以在dash.el page->> 宏示例上进行测试,既不太简单也不太复杂。

    【讨论】:

      【解决方案3】:

      您可能会发现imacroexpand.el 可以满足您的需求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-16
        • 1970-01-01
        相关资源
        最近更新 更多