如何在Emacs中调用交互式elisp解释器?

现在我在*scratch*缓冲区中写入expression式并通过使用Cx Ce进行评估来testing它们。 我真的很感谢有一个像SLIME或irb这样的交互式解释器,我可以在其中testingEmacs Lispexpression式。

在Emacs-Lisp模式下评估Lispexpression式很容易:

 Mx ielm 

您可以在“Lisp Interaction”的Emacs手册部分阅读有关此function的更多信息

Eshell是交互式Elisp解释器的另一种select。

 Mx eshell 

它不仅是一个像bash(或cmd.exe,如果在Windows上)的命令shell,而且还可以交互式编写和执行Elisp代码。

 ~ $ ls foo.txt bar.txt ~ $ (+ 1 1) 2 

你最好的select是*scratch*缓冲区。 您可以通过首先打开debugging器使其更像REPL:

 Mx set-variable debug-on-error t 

然后使用Cj而不是Cx Ce ,这将在expression式后面插入expression式计算结果。 而不是诸如命令历史, * * *类的东西,你只需要移动*scratch*缓冲区并编辑。

如果你想让* * *这样的东西起作用,就像通常的REPL一样,试试ielm

 Mx ielm 

*scratch*缓冲区中,只需键入Cj以在点之前计算expression式。

要运行一个elispexpression式,您可以使用M-:快捷方式并在迷你缓冲区中inputexpression式。 对于其他情况,您可以使用临时缓冲区

那么,如果您真的对emacs的文字REPL感兴趣,可以使用emacs的-batch模式编写一个:

 (require 'cl) (defun read-expression () (condition-case err (read-string "> ") (error (message "Error reading '%s'" form) (message (format "%s" err))))) (defun read-expression-from-string (str) (condition-case err (read-from-string str) (error (message "Error parsing '%s'" str) (message (format "%s" err)) nil))) (defun repl () (loop for expr = (read-string "> ") then (read-expression) do (let ((form (car (read-expression-from-string expr)))) (condition-case err (message " => %s" (eval form)) (error (message "Error evaluating '%s'" form) (message (format "%s" err))))))) (repl) 

你可以从命令行调用这个,或者你可以从运行一个shell的emacs缓冲区中调用它:

 kburton@hypothesis:~/projects/elisp$ emacs -batch -l test.el Loading 00debian-vars... > (defvar x '(lambda (y) (* y 100))) => x > (funcall x 0.25) => 25.0 > kburton@hypothesis:~/projects/elisp$