كيفية استدعاء مترجم elisp التفاعلي في Emacs؟
-
02-07-2019 - |
سؤال
الآن أكتب التعبيرات في *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-:الاختصار وأدخل التعبير في المخزن المؤقت المصغر.لحالات أخرى يمكنك استخدامها يخدش متعادل