سؤال

الآن أكتب التعبيرات في *scratch* المخزن المؤقت واختبارها من خلال التقييم باستخدام ج-س ج-ه.سأكون ممتنًا حقًا لوجود مترجم تفاعلي مثل SLIME أو irb، حيث يمكنني اختبار تعبيرات Emacs Lisp.

هل كانت مفيدة؟

المحلول

من السهل تقييم تعبيرات Lisp في وضع Emacs-Lisp الأدنى:

M-x ielm

يمكنك قراءة المزيد عن هذه الميزة في قسم دليل Emacs حول "Lisp Interaction"

نصائح أخرى

إشيل هو خيار آخر لمترجم 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 المؤقت الذي يقوم بتشغيل 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$

لتشغيل تعبير elisp واحد فقط، يمكنك استخدام M-:الاختصار وأدخل التعبير في المخزن المؤقت المصغر.لحالات أخرى يمكنك استخدامها يخدش متعادل

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top