Can I clean the repl?

ClojureRead Eval-Print-Loop

Clojure Problem Overview


I have played with a lot of code in a repl console, how can I clear it? I would like a fresh one without restarting it. Can that be done?

Clojure Solutions


Solution 1 - Clojure

If you want to clear the current namespace of all temporary variables and functions you declared you can use this one liner (or make a function of it) :

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

or

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

It does not claim to give you a squeaky clean namespace, just one with less of the junk which usually accumulates in a typical repl session.

Use with caution : do not pull the rug from under your feet!

Solution 2 - Clojure

If you are running the repl through a terminal window (eg: Terminal.app on MacOS or xterm/aterm/urxvt etc on linux) then you can type Control-L and it should clear the terminal window and give you a new repl prompt. However all macros/atoms you previously defined are still going to be in memory, so this is just a "Cosmetic" clear.

Solution 3 - Clojure

In EMACS/slime REPLs C-c C-o clears the last output (in case you've typed something that gave a very long answer) C-c M-o clears the whole thing

In GNOME terminals, you've got a menu option Terminal/Reset and Clear

Solution 4 - Clojure

The shorcut to clean the whole buffer : C-u C-c C-o

The shortcut to clean the last output : C-c C-o

Note, the old way was : C-c M-o

Also, cider-repl-clear-buffer (which is bound to C-ENTER s-c on my machine)

Solution 5 - Clojure

If you are using Emacs + nREPL, you can either:

  • Run Mx nrepl-clear-buffer or
  • Run Cc Mo

If the key binding is not enabled, run Mxnrepl-interaction-mode to enable it. You can find other useful shortcuts in nrepl.el and/or customize the key bindings to fit your needs.

Note: you can find all nREPL's key bindings in your system by running M-x v nrepl-mode-map and following the nrepl.el link.

Solution 6 - Clojure

I use the Emacs command cider-repl-clear-buffer via M-x. One might also use cider-repl-clear-output with a prefix argument: C-u C-c C-o.

Solution 7 - Clojure

It depends what you mean by 'clean'. To remove all namespaces within a 'package' you can use:

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

Solution 8 - Clojure

For users of the Cursive IDE plugin for IntelliJ IDEA who end up here, like me:

You can "cosmetically" clear the REPL (keeping your def'd symbols etc.) by clicking on this icon at the top of the REPL frame:

Clear REPL icon

There's no default key binding for this, but you can easily add one by opening your preferences, navigating to Keymap > Plugins > Cursive, and adding a binding for "Clear output for current REPL".

Alternatively, you can right-click in the editor and access "Clear output for current REPL" via the REPL commands.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBelunView Question on Stackoverflow
Solution 1 - ClojurePeter TillemansView Answer on Stackoverflow
Solution 2 - ClojureBrian GianforcaroView Answer on Stackoverflow
Solution 3 - ClojureJohn Lawrence AspdenView Answer on Stackoverflow
Solution 4 - ClojurenhaView Answer on Stackoverflow
Solution 5 - Clojurea2ndradeView Answer on Stackoverflow
Solution 6 - ClojureDave LiepmannView Answer on Stackoverflow
Solution 7 - ClojureRachel K. WestmacottView Answer on Stackoverflow
Solution 8 - ClojurefordyView Answer on Stackoverflow