Прямо сейчас я пишу выражения в буфере *scratch*
и проверяю их, оценивая с помощью C-x C-e. Я был бы очень признателен за использование интерактивного интерпретатора, такого как SLIME или irb, в котором я мог бы тестировать выражения Emacs Lisp.
Как вызвать интерактивный интерпретатор elisp в Emacs?
Ответ 1
Легко оценить выражения Lisp в Inferior Emacs- Lisp Режим:
M-x ielm
Подробнее об этой функции вы можете прочитать в разделе Emacs в разделе "Lisp Взаимодействие"
Ответ 2
Eshell - еще один вариант для интерактивного интерпретатора Elisp.
M-x eshell
Это не только командная оболочка вроде bash (или cmd.exe, если в Windows), но вы также можете интерактивно писать и выполнять код Elisp.
~ $ ls
foo.txt
bar.txt
~ $ (+ 1 1)
2
Ответ 3
Лучше всего использовать буфер *scratch*
. Вы можете сделать его более похожим на REPL, сначала включив отладчик:
M-x set-variable debug-on-error t
Затем используйте C-j
вместо C-x C-e
, который вставляет результат вычисления выражения в буфер в строке после выражения. Вместо таких вещей, как история команд, * * *
и т.д., Вы просто перемещаете буфер *scratch*
и редактируете.
Если вы хотите, чтобы такие вещи, как * * *
, работали, как обычный REPL, попробуйте ielm
.
M-x ielm
Ответ 4
В буфере *scratch*
просто введите C-j, чтобы оценить выражение перед точкой.
Ответ 5
Чтобы запустить только одно выражение elisp, вы можете использовать M-: shortcut и ввести выражение в мини-буфер. В других случаях вы можете использовать буфер с буфером
Ответ 6
Хорошо, если вас действительно интересует буквальный REPL для emacs, можно написать один, используя режим -batch emacs:
(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, запускающего оболочку:
[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$