2008-09-28 89 views

回答

53

可以很容易地评估劣质Lisp语言表达的Emacs Lisp的模式:

M-x ielm 

你可以阅读更多有关此功能在Emacs manual section on "Lisp Interaction"

+1

正是我?寻找,非常感谢! – 2008-09-29 00:27:10

1

*scratch*缓冲区中,只需键入C-j来计算点前的表达式。

0

好吧,如果你在一个文字REPL为Emacs真正感兴趣的,可以使用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的缓冲区内:

[email protected]:~/projects/elisp$ emacs -batch -l test.el 
Loading 00debian-vars... 
> (defvar x '(lambda (y) (* y 100))) 
=> x 
> (funcall x 0.25) 
=> 25.0 
> 
[email protected]:~/projects/elisp$ 
+0

这看起来比它应该更复杂 - 运行一个shell,它运行另一个emacs以批处理模式运行REPL,所有这些都在主emacs运行时内部。无论如何,它解决了我的问题,所以感谢您的帮助! – 2008-09-28 04:57:29

+0

此REPL实现不处理多行输入。如果你没有在一个行结束表达它给: 错误分析“(无论” (档案结尾repl.el) 有一种简单的方法来解决这个问题 – 2008-09-28 05:14:02

8

你最好的赌注是*scratch*缓冲区。你可以把它更像是通过调试器第一次打开一个REPL:

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

然后用C-j代替C-x C-e,这将插入计算表达式插入表达后的行缓冲的结果。而不是诸如命令历史记录,* * *等等,您只需移动*scratch*缓冲区并进行编辑。

如果你想让* * *这样的东西起作用,更像是一个普通的REPL,试试ielm

M-x ielm 
1

要运行只是一个elisp的表达,你可以使用M-:快捷方式并在迷你缓冲区中输入表达式。对于其他情况,您可以使用划伤缓冲区

14

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

M-x eshell 

它不仅是一个命令行shell诸如bash(或cmd.exe,如果在Windows上),但你也可以交互地编写和执行elisp的代码。

~ $ ls 
foo.txt 
bar.txt 
~ $ (+ 1 1) 
2 
相关问题