现在我在*scratch*
缓冲区中编写表达式并通过评估来测试它们C-x C-e。我非常感谢有一个像 SLIME 或 irb 这样的交互式解释器,我可以在其中测试 Emacs Lisp 表达式。
Michał Kwiatkowski
问问题
11021 次
6 回答
65
于 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-j
instead 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 回答