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

StackOverflow https://stackoverflow.com/questions/145175

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Вычислить выражения Lisp в низшем режиме Emacs-Lisp легко:

M-x ielm

Подробнее об этой функции вы можете прочитать в Раздел руководства Emacs «Взаимодействие с Lisp»

Другие советы

Эшелл — еще один вариант интерактивного интерпретатора Elisp.

M-x eshell

Это не только командная оболочка, такая как bash (или cmd.exe в Windows), но вы также можете в интерактивном режиме писать и выполнять код 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

в *scratch* буфер, просто введите C-j, чтобы вычислить выражение перед точкой.

Что ж, если вас действительно интересует буквальный 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, запускающего оболочку:

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$

Чтобы запустить только одно выражение elisp, вы можете использовать M-:ярлык и введите выражение в мини-буфер.В других случаях вы можете использовать царапать буфер

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top