現在、*scratch*
バッファに式を書き、 で評価してテストしていC-x C-eます。Emacs Lisp 式をテストできる、SLIME や irb のようなインタラクティブなインタープリターがあれば本当にありがたいです。
6 に答える
Inferior Emacs-Lisp モードで Lisp 式を評価するのは簡単です:
M-x ielm
この機能の詳細については、「Lisp Interaction」の Emacs マニュアル セクションを参照してください。
Eshellは、インタラクティブな Elisp インタープリターのもう 1 つのオプションです。
M-x eshell
bash (または Windows の場合は cmd.exe) のようなコマンド シェルであるだけでなく、Elisp コードを対話的に記述して実行することもできます。
~ $ ls
foo.txt
bar.txt
~ $ (+ 1 1)
2
あなたの最善の策は*scratch*
バッファです。最初にデバッガーをオンにすることで、REPLのようにすることができます。
M-x set-variable debug-on-error t
次に、C-j
の代わりにを使用しますC-x C-e
。これにより、式の評価結果が式の後の行のバッファーに挿入されます。コマンド履歴などの代わりに、バッファ内を* * *
移動して編集するだけです。*scratch*
* * *
通常のREPLのように機能したい場合は、を試してくださいielm
。
M-x ielm
elisp 式を 1 つだけ実行するには、M-: ショートカットを使用してミニバッファーに式を入力します。他の場合には、スクラッチバッファを使用できます
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$
バッファーで Cj と入力するだけで、*scratch*
ポイントの前の式を評価できます。