我在 emacs 上使用 paredit 和 SLIME's repl。这意味着在我键入 repl 期间的任何时候,我的 s 表达式都是平衡的。
但是,它们可能不完整,我可能想继续在另一行中键入它们,如下所示:
CL-USER> (defun print-hello ()
)
但是,当我通过按回车键开始新行时,SLIME repl 会执行我不完整的表达式。我希望它等待我完成表达式,如下所示:
CL-USER> (defun print-hello ()
(format t "Hello, world"))
请问我该如何做到这一点?
对于这种情况,在 REPL 中编写长 s 表达式时,我认为最好的方法是使用 s.scratch 缓冲区。 您可以对其进行编辑,然后执行
C-J
在缓冲区内按回车键没问题,我正在使用狡猾,但捕获可能是这样的:
(defun print-hello ()
(format t "Hello, world"))
; => PRINT-HELLO
另一种选择是在没有最后一个父级的情况下工作:-(
或者按照 @jkiisky 注释中的建议,键入表达式并在 s 表达式的中间添加C-j
CL-USER> (defun
)
与您的问题相关,Lispy提供了与SLIME的集成。
我通常从不在 REPL 缓冲区中键入任何内容。相反,我编辑源文件中的所有代码,并使用 e 来评估当前的 sexp。
lispy
也是paredit
的超集,如果你关心兼容性的话。