Emacs Lisp 宏步进器

标签 emacs macros elisp

是否有 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))))

没有达到我的预期。

最佳答案

也许你需要这个:

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

关于Emacs Lisp 宏步进器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5925485/

相关文章:

emacs - 如何定义包装命令?

emacs - 将键盘宏应用于 Emacs 中的事件区域

c - 宏内容的长度有限制吗?

c - 为什么我在编译这段代码时会出错以及如何修复它们?

data-structures - Emacs Lisp : Standard way to verify tree structures?

matlab - 在 Emacs matlab 模式下启动远程 Matlab 进程?

emacs - 任何人都知道如何在 emacs 中更改我的模式行上的文件名的颜色?

emacs - 在 Elisp 中调试 "Error setting nil"

emacs - 如何在 minibuffer 中输入一个空格而不是完成一个单词?

bash - 在 Emacs shell 和 Cygwin 下处理信号