我安装了Emacs + SLIME + SBCL,我是这个东西的新手。所以,我的问题是如何评估整个文件或仅选择文件的选定区域,并将EACH表达式的结果打印到控制台。例如,代码
(+ 3 5)
(defun my-first (a) (car a))
(my-first (list 5 7 3))
我想在控制台中看到这个:
8
MY_FIRST
5
感谢您的帮助。
答案 0 :(得分:1)
因此,对我来说最好和最简单的解决方案是下一步包装代码:
(format t "~{~a~%~}" (list
<code in file>
))
而不是我在文件的末尾做C-x C-e,并逐个获取所有表达式的结果。谢谢大家。
<强> UPD 强> 我使用互联网和这个答案:How to run Common Lisp code with Slime in Emacs Lisp来编写这两个函数。 此代码位于我的.emacs文件中。 现在我应该按'C-c e'或'C-c r'来评估所有文件或仅选择所选区域。 问题绝对解决了。
(require 'slime)
(defun lispy--eval-lisp (str)
"Eval STR as Common Lisp code."
(unless (slime-current-connection)
(let ((wnd (current-window-configuration)))
(slime)
(while (not (and (slime-current-connection)
(get-buffer-window (slime-output-buffer))))
(sit-for 0.2))
(set-window-configuration wnd)))
(let (deactivate-mark)
(slime-eval `(swank:eval-and-grab-output ,str))))
(defun feval ()
"Evaluates the whole file"
(interactive)
(message (car (lispy--eval-lisp
(concat "(format t \"~{~a~%~}\" (list " (string-make-unibyte (buffer-string)) "))")))))
(defun reval (from to)
(interactive "r")
(message (car (lispy--eval-lisp
(concat "(format t \"~{~a~%~}\" (list " (string-make-unibyte (buffer-substring from to)) "))")))))
(global-set-key "\C-ce" 'feval)
(global-set-key "\C-cr" 'reval)
答案 1 :(得分:0)
基本上取决于你的emacs设置:
但是将光标放在s表达式中的最后一个父项之后;
C-x C-e评估de表达式,并将结果发送到迷你缓冲区,如果将结果存储在变量中,则此varibable可用于REPL SESSION
如果你想编译并加载一个函数,请检查
C-c C-c,在函数的最后一个父级,然后该函数将在REPL上可用
如果你启用F10:
,最后检查emacs菜单栏中的slime菜单以及编译和加载文件:
并且youtube上有一个来自marco Baringer的精彩教程,我建议您花点时间做这件事,对于emacs和史莱姆来说是一个很好的(我认为是最好的)。
答案 2 :(得分:0)
您可以定义自己的Emacs-Lisp函数,包装您所在地区list
内的表单,评估此列表并打印所有结果。
这是我手动执行的确切操作,如果我需要查看多个表单的结果,这很少。
否则,我只在每张表格上使用 C-x e 。