Emacsでインタラクティブなelispインタープリターを呼び出す方法は?
-
02-07-2019 - |
質問
今、 * scratch *
バッファーに式を記述し、 C-x C-e で評価してテストします。 Emacs Lisp式をテストできるSLIMEやirbのようなインタラクティブなインタプリタがあれば本当に嬉しいです。
解決
Inferior Emacs-LispモードでLisp式を評価するのは簡単です:
M-x ielm
この機能の詳細については、 Emacsをご覧ください。 " Lisp Interaction"の手動セクション
他のヒント
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-x C-e
の代わりに C-j
を使用します。これにより、式の評価結果が式の後の行のバッファーに挿入されます。コマンド履歴や * * *
などの代わりに、 * scratch *
バッファーを移動して編集します。
* * *
のようなものを、通常のREPLのように動作させたい場合は、 ielm
を試してください。
M-x ielm
* scratch *
バッファーで、C-jと入力してポイントの前の式を評価します。
まあ、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)
コマンドラインから、または必要に応じてシェルを実行している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$
1つのelisp式を実行するには、M-:ショートカットを使用し、ミニバッファーに式を入力します。その他の場合は、スクラッチバッファ
を使用できます