如何让swank忘记之前评估的所有定义?
我希望它取消定义通过评估定义的所有宏,函数和变量(例如,b
评估缓冲区)。让它恢复到我重新启动电脑并重新启动swank服务器时的状态。
我试过了:
slimv Clear-REPL(,-
)命令:
这只会清除屏幕(缓冲区)。
CL-使用者> (swank:restart-server)
(来自REPL缓冲区):
服务器重新启动但它仍会记住我的旧defun
和其他定义。
CL-使用者> (slime-restart-inferior-lisp)
和`(slimv-restart-inferior-lisp)
两者都未定义。
答案 0 :(得分:6)
Slimv作者在这里。我添加了一个新命令'退出REPL'瘦身。这通过调用swank:quit-lisp
来关闭运行swank服务器的lisp进程,然后关闭REPL缓冲区。你可以使用这个,然后是另一个连接服务器&#39;命令重启REPL。 &#39;退出REPL&#39;的默认映射是<Leader>Q
,因此您可以通过<Leader>Q<Leader>c
序列重新启动REPL。
请参阅GitHub上的提交44a50afc...或BitBucket上的a8abdbbc...。
答案 1 :(得分:2)
M-x slime-restart-inferior-lisp
将从头开始重新启动。
答案 2 :(得分:1)
这不能直接解决您的问题,但如果您在重新启动时需要丢失所有变量,那么在单独的程序包中工作应该适合您。
CL-USER> (defpackage :my-separate-package (:use :cl :cl-user :swank))
#<PACKAGE "MY-SEPARATE-PACKAGE">
CL-USER> (in-package :my-separate-package)
#<PACKAGE "MY-SEPARATE-PACKAGE">
MY-SEPARATE-PACKAGE> (defvar a "a")
A
MY-SEPARATE-PACKAGE> a
"a"
MY-SEPARATE-PACKAGE> (in-package :cl-user)
#<PACKAGE "COMMON-LISP-USER">
CL-USER> (in-package :my-separate-package)
#<PACKAGE "MY-SEPARATE-PACKAGE">
MY-SEPARATE-PACKAGE> a
"a"
MY-SEPARATE-PACKAGE> (in-package :cl-user)
#<PACKAGE "COMMON-LISP-USER">
CL-USER> (delete-package :my-separate-package)
T
CL-USER> (defpackage :my-separate-package (:use :cl :cl-user :swank))
#<PACKAGE "MY-SEPARATE-PACKAGE">
CL-USER> a
; Evaluation aborted on #<UNBOUND-VARIABLE A {1004AD9AF3}>.
CL-USER> (in-package :my-separate-package)
#<PACKAGE "MY-SEPARATE-PACKAGE">
MY-SEPARATE-PACKAGE> a
; Evaluation aborted on #<UNBOUND-VARIABLE A {10055C6063}>.
然后,每次重新创建包
时,都会删除环境并且没有这些变量