代码之家  ›  专栏  ›  技术社区  ›  Michał Kwiatkowski

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

  •  38
  • Michał Kwiatkowski  · 技术社区  · 16 年前

    现在我用 *scratch* 缓冲并通过评估 C-X C-E . 我非常感谢有一个像slime或irb这样的交互式解释程序,我可以在其中测试EmacsLisp表达式。

    6 回复  |  直到 12 年前
        1
  •  58
  •   Greg Mattes    13 年前

    在下面的Emacs Lisp模式下,很容易评估Lisp表达式:

    M-x ielm
    

    您可以在 Emacs manual section on "Lisp Interaction"

        2
  •  15
  •   Ray    15 年前

    Eshell 是交互式elisp解释器的另一个选项。

    M-x eshell
    

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

    ~ $ ls
    foo.txt
    bar.txt
    ~ $ (+ 1 1)
    2
    
        3
  •  8
  •   jfm3    16 年前

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

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

    然后使用 C-j 而不是 C-x C-e 将表达式的计算结果插入到表达式后面一行的缓冲区中。而不是命令历史, * * * 等等,你只是在 *刮伤* 缓冲和编辑。

    如果你想要这样的东西 *** 要工作,更像通常的回复,请尝试 ielm .

    M-x ielm
    
        4
  •  1
  •   cjm    16 年前

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

        5
  •  1
  •   Kyle Burton    16 年前

    好吧,如果您真的对emacs的字面repl感兴趣,可以使用emacs的-batch模式编写一个repl:

    (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$
    
        6
  •  1
  •   Alex Ott    16 年前

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