Emacsでインタラクティブなelispインタープリターを呼び出す方法は?

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

  •  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-:ショートカットを使用し、ミニバッファーに式を入力します。その他の場合は、スクラッチバッファ

を使用できます
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top