繁体   English   中英

我可以清理repl吗?

[英]Can I clean the repl?

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

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

(map #(ns-unmap *ns* %) (keys (ns-interns *ns*)))

要么

(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 ... 

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

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

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

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

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

清理整个缓冲区的方法是: C - u C - c C - o

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

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

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

如果您使用的是Emacs + nREPL ,您可以:

  • 运行M x nrepl-clear-buffer
  • 运行C c M o

如果未启用密钥绑定,请运行M x nrepl-interaction-mode以启用它。 您可以在nrepl.el中找到其他有用的快捷方式和/或自定义键绑定以满足您的需求。

注意:您可以通过运行Mx v nrepl-mode-map并遵循nrepl.el链接在系统中找到所有nREPL的键绑定。

我通过Mx使用Emacs命令cider-repl-clear-buffer 也可以使用带有前缀参数的cider-repl-clear-outputCu Cc Co。

这取决于你所说的'干净'。 要删除“包”中的所有名称空间,您可以使用:

(mapv remove-ns 
  (map symbol 
    (filter #(.startsWith % "org.mycompany") 
      (map str (all-ns)))))

对于IntelliJ IDEA的Cursive IDE插件的用户,他们最终来到这里,像我一样:

您可以通过单击REPL框架顶部的此图标来“美化”清除REPL(保留您的def'd符号等):

清除REPL图标

此处没有默认的键绑定,但您可以通过打开首选项轻松添加一个,导航到Keymap> Plugins> Cursive,并为“当前REPL的清除输出”添加绑定。

或者,您可以在编辑器中单击鼠标右键,然后通过REPL命令访问“清除当前REPL的输出”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM