2010-09-03 15 views
44

Ho giocato con un sacco di codice in una console di repl, come posso cancellarlo? Vorrei uno nuovo senza ricominciare. Può essere fatto?Posso pulire il repl?

risposta

17

Se si esegue l'repl attraverso una finestra di terminale (ad esempio: Terminal.app su MacOS o xterm/aterm/urxvt etc su linux) quindi è possibile digitare Control-L e dovrebbe cancellare la finestra del terminale e dare un nuovo prompt repl. Tuttavia tutte le macro/atomi precedentemente definiti saranno ancora in memoria, quindi questo è solo un "Cosmetic" chiaro.

+0

la domanda iniziale riguardava la pulizia estetica del repl. più tardi ho capito che la compensazione poteva anche significare qualcos'altro :) – Belun

48

Se si desidera cancellare lo spazio dei nomi corrente di tutte le variabili e le funzioni temporanee si dichiarato è possibile utilizzare questo uno di linea (o fare una funzione di esso):

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

o

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

Non pretende di darti uno spazio dei nomi pulito, solo uno con meno spazzatura che di solito si accumula in una tipica sessione di sostituzione.

Usare con cautela: non tirare il tappeto da sotto i piedi!

+1

grazie. stavo pensando solo a liberarmi del testo nella console ... hai messo nuova luce in esso – Belun

+3

Questa è una risposta sorprendente alla ricerca della domanda giusta. –

18

in Emacs/REPLs melma Cc Co cancella l'ultima uscita (nel caso in cui hai digitato qualcosa che ha dato una risposta molto lunga) Cc Mo cancella il tutto

In terminali GNOME, hai un'opzione di menu terminale/reset e Clear

+1

Si noti che C-c M-o non cancella alcun lavoro effettivamente interpretato dal REPL, ma cancella semplicemente lo schermo. Qualsiasi definizione è ancora lì. – johnbakers

3

Se si utilizza Emacs + nREPL, è possibile:

  • Run Mxnrepl-clear-buffero
  • Run CcMo

Se il legame chiave non è abilitata, l'esecuzione Mxnrepl-interaction-mode per attivarlo. Puoi trovare altre scorciatoie utili in nrepl.el e/o personalizzare le associazioni di tasti in base alle tue esigenze.

Nota: è possibile trovare tutte le nREPL s' associazioni dei tasti nel sistema eseguendo M-x vnrepl-mode-map e seguendo il link nrepl.el.

+0

perché sì, sto eseguendo emacs. questo funziona benissimo, grazie! :) – enderland

4

La scorciatoia per pulire l'intero buffer: C - uC - cC - o

La scorciatoia per pulire l'ultima uscita: C - cC - o

nota, il vecchio modo era: C - cM - o

2

io uso il comando Emacs cider-repl-clear-buffer via M-x. Si potrebbe anche usare cider-repl-clear-output con un argomento prefisso: C-u C-c C-o.

0

Dipende da cosa si intende per "pulito". Per rimuovere tutti gli spazi dei nomi all'interno di un "pacchetto" è possibile utilizzare:

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