在编辑时,如何轻松地重新加载Emacs lisp代码?

时间:2010-10-26 02:24:29

标签: emacs elisp

作为Emacs的初学者,我正在编写一个小模式。我目前(天真)编程elisp的方法包括进行更改,关闭Emacs,重新启动Emacs以及观察更改。我该如何简化这个过程?是否有命令刷新一切?

6 个答案:

答案 0 :(得分:17)

您可以尝试使用 M-C-x eval-defun),它将重新评估点周围的顶级表单。与 Mx eval-buffer Cx Ce exal-last-sexp)不同,这会将使用defvardefcustom声明的变量重置为其初始值价值,这可能是你绊倒的。

答案 1 :(得分:3)

同时试用C-u C-M-x来评估定义点并在那里设置一个断点,这样当你点击那个函数时就会掉进调试器。

在开发Emacs代码时,

M-x ielm作为功能更丰富的Lisp REPL也非常有用。

答案 2 :(得分:2)

M-x eval-buffer应该这样做。

答案 3 :(得分:2)

肖恩说。另外,我有(eval-defun)绑定一个键,还有一个测试。然后开发循环变为:1)编辑功能,2)按下eval-and-test键,3)观察结果,4)重复。这非常快。

在开发过程中,我编写了一个测试,将其绑定到jmc-test,然后使用上面的键在我刚刚编辑的函数上运行它。我编辑更多,然后再次按键,再次测试。当函数工作时,我zap jmc-test,编辑另一个函数,并编写另一个jmc-test函数。它们几乎总是一行代码,因此很容易爆炸。

(defun jmc-eval-and-test ()
  (interactive)
  (eval-defun nil)
  (jmc-test))
(define-key emacs-lisp-mode-map (kbd "<kp-enter>")  'jmc-eval-and-test)

(when t
  (defun myfunc (beer yum)
    (+ beer yum))
  (defun jmc-test () (message "out: %s" (myfunc 1 2))))

编辑“myfunc”时,如果我按下键盘输入,则输出“out:3”。

答案 4 :(得分:1)

这完全取决于你写的是什么以及你是如何写的。切换模式应该为您提供新的行为。如果您正在使用[define-minor-mode][1],则可以在宏的主体中添加代码来锁定模式变量:

(define-minor-mode my-minor-mode 
  "doc string"
  nil
  ""
  nil
  (if my-minor-mode
      (progn
         ;; do something when minor mode is on
      )
    ;; do something when minor mode is off
    )

但是,另一种快速检查的方法是从现有的Emacs中生成新的Emacs:

M-x shell-command emacs&

答案 5 :(得分:0)

我只是在.emacs文件中定义了一个名为ldf(load-file的缩写)的函数, 像这样:

(defun ldf(arg)(interactive&#34; P&#34;)(load-file(buffer-file-name)))

如您所见,这个小函数查找当前缓冲区的文件名,然后加载该文件。每当我需要重新加载当前缓冲区elisp文件时,只需输入&#34; M-x ldf&#34;