Question

À l'heure actuelle, j'écris des expressions dans la mémoire tampon * Scratch * et je les teste en les évaluant avec C-x C-e . J'apprécierais vraiment d'avoir un interprète interactif comme SLIME ou irb, dans lequel je pourrais tester les expressions Lisp d'Emacs.

Était-ce utile?

La solution

Il est facile d'évaluer les expressions Lisp en mode Infer Emacs-Lisp:

M-x ielm

Pour en savoir plus sur cette fonctionnalité, consultez le Emacs. section du manuel sur "Lisp Interaction"

Autres conseils

Eshell est une autre option pour un Elisp interactif. interprète.

M-x eshell

Non seulement c'est un shell de commande comme bash (ou cmd.exe sous Windows), mais vous pouvez aussi écrire et exécuter de manière interactive du code Elisp.

~ $ ls
foo.txt
bar.txt
~ $ (+ 1 1)
2

Votre meilleur pari est le tampon * scratch * . Vous pouvez le rendre plus comme un REPL en activant d’abord le débogueur:

M-x set-variable debug-on-error t

Ensuite, utilisez C-j au lieu de C-x C-e , qui insérera le résultat de l'évaluation de l'expression dans le tampon, à la suite de l'expression. Au lieu d'éléments tels que l'historique des commandes, * * * , etc., il vous suffit de vous déplacer dans le tampon * scratch * et de l'éditer.

Si vous voulez que des choses comme * * * fonctionnent, comme un REPL habituel, essayez ielm .

M-x ielm

Dans le tampon * scratch * , tapez simplement C-j pour évaluer l'expression avant le point.

Eh bien, si vous êtes vraiment intéressé par un REPL littéral pour emacs, vous pouvez en écrire un en utilisant le mode -batch de 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)

Vous pouvez appeler cela depuis la ligne de commande ou, comme vous semblez le vouloir, depuis un tampon emacs exécutant un shell:

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$

Pour n'exécuter qu'une seule expression elisp, vous pouvez utiliser le raccourci M-: et entrer l'expression dans un mini-tampon. Dans les autres cas, vous pouvez utiliser le scratch tampon

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top