作为Emacs的初学者,我正在编写一个小模式。我目前(天真)编程elisp的方法包括进行更改,关闭Emacs,重新启动Emacs以及观察更改。我该如何简化这个过程?是否有命令刷新一切?
答案 0 :(得分:17)
您可以尝试使用 M-C-x (eval-defun
),它将重新评估点周围的顶级表单。与 Mx eval-buffer 或 Cx Ce (exal-last-sexp
)不同,这会将使用defvar
和defcustom
声明的变量重置为其初始值价值,这可能是你绊倒的。
答案 1 :(得分:3)
同时试用C-u C-M-x
来评估定义点并在那里设置一个断点,这样当你点击那个函数时就会掉进调试器。
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;