Подтвердить что ты не робот

Как вызвать интерактивный интерпретатор elisp в Emacs?

Прямо сейчас я пишу выражения в буфере *scratch* и проверяю их, оценивая с помощью C-x C-e. Я был бы очень признателен за использование интерактивного интерпретатора, такого как SLIME или irb, в котором я мог бы тестировать выражения Emacs Lisp.

4b9b3361

Ответ 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$