我可以清理repl吗?

Bel*_*lun 47 clojure read-eval-print-loop

我在repl控制台中玩了很多代码,我该如何清除它?我想要一个新的,而不重新启动它.可以这样做吗?

Pet*_*ans 51

如果要清除所声明的所有临时变量和函数的当前名称空间,可以使用这个单元格(或者使用它的函数):

(map #(ns-unmap *ns* %) (keys (ns-interns *ns*)))
Run Code Online (Sandbox Code Playgroud)

要么

(ns myutil)
(defn ns-clean
       "Remove all internal mappings from a given name space or the current one if no parameter given."
   ([] (ns-clean *ns*)) 
   ([ns] (map #(ns-unmap ns %) (keys (ns-interns ns)))))
(ns mytest)

... make loads of junk ...

(myutil/ns-clean)

... great!!! I can now make all new junk ... 
Run Code Online (Sandbox Code Playgroud)

它并没有声称给你一个干净的名字空间,只是一个通常在典型的repl会话中累积的垃圾.

请谨慎使用:不要从脚下拉地毯!

  • 这是寻找正确问题的惊人答案. (3认同)
  • 谢谢.我正在考虑摆脱控制台中的文字......你给它带来了新的亮点 (2认同)

Bri*_*aro 22

如果你通过终端窗口运行repl(例如:MacOS上的Terminal.app或linux上的xterm/aterm/urxvt等),那么你可以输入Control-L,它应该清除终端窗口并给你一个新的repl提示符.但是,您之前定义的所有宏/原子仍然会在内存中,因此这只是一个"化妆品"清晰.


Joh*_*den 18

在EMACS/slime REPLs中,Cc Co清除最后一个输出(如果你输入了一个很长的回答的话)Cc Mo清除整个事情

在GNOME终端中,您有一个菜单选项Terminal/Reset和Clear


nha*_*nha 6

shorcut清理整个缓冲区:C- u C- c C-o

清理最后一个输出的快捷方式:C- c C-o

注意,旧方法是:C- c M-o

另外,cider-repl-clear-buffer(在我的机器上绑定C- ENTER s- c)