39

現在、*scratch*バッファに式を書き、 で評価してテストしていC-x C-eます。Emacs Lisp 式をテストできる、SLIME や irb のようなインタラクティブなインタープリターがあれば本当にありがたいです。

4

6 に答える 6

65

Inferior Emacs-Lisp モードで Lisp 式を評価するのは簡単です:

M-x ielm

この機能の詳細については、「Lisp Interaction」の Emacs マニュアル セクションを参照してください。

于 2008-09-28T16:59:20.793 に答える
20

Eshellは、インタラクティブな Elisp インタープリターのもう 1 つのオプションです。

M-x eshell

bash (または Windows の場合は cmd.exe) のようなコマンド シェルであるだけでなく、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の代わりにを使用しますC-x C-e。これにより、式の評価結果が式の後の行のバッファーに挿入されます。コマンド履歴などの代わりに、バッファ内を* * *移動して編集するだけです。*scratch*

* * *通常のREPLのように機能したい場合は、を試してくださいielm

M-x ielm
于 2008-09-28T04:30:27.317 に答える
2

elisp 式を 1 つだけ実行するには、M-: ショートカットを使用してミニバッファーに式を入力します。他の場合には、スクラッチバッファを使用できます

于 2008-11-04T08:55:19.393 に答える
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)

これはコマンド ラインから呼び出すことも、必要に応じて、シェルを実行している 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 に答える
1

バッファーで Cj と入力するだけで、*scratch*ポイントの前の式を評価できます。

于 2008-09-28T04:20:16.530 に答える