39

现在我在*scratch*缓冲区中编写表达式并通过评估来测试它们C-x C-e。我非常感谢有一个像 SLIME 或 irb 这样的交互式解释器,我可以在其中测试 Emacs Lisp 表达式。

4

6 回答 6

65

在 Inferior Emacs-Lisp 模式下计算 Lisp 表达式很容易:

M-x ielm

您可以在Emacs 手册的“Lisp 交互”部分中阅读有关此功能的更多信息

于 2008-09-28T16:59:20.793 回答
20

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

M-x eshell

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

~ $ ls
foo.txt
bar.txt
~ $ (+ 1 1)
2
于 2010-01-19T00:42:47.733 回答
8

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

M-x set-variable debug-on-error t

然后使用C-jinstead of C-x C-e,它将计算表达式的结果插入到表达式后面的行的缓冲区中。* * *您只需在*scratch*缓冲区中移动并进行编辑,而不是命令历史记录等。

如果你想让事情像* * *通常的 REPL 一样正常工作,请尝试ielm.

M-x ielm
于 2008-09-28T04:30:27.317 回答
2

要只运行一个 elisp 表达式,您可以使用 M-: 快捷方式并在 mini-buffer 中输入表达式。对于其他情况,您可以使用暂存缓冲区

于 2008-11-04T08:55:19.393 回答
1

*scratch*缓冲区中,只需键入 Cj 即可计算点之前的表达式。

于 2008-09-28T04:20:16.530 回答
1

好吧,如果您真的对 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$
于 2008-09-28T04:26:09.137 回答