203

How do you clear the IRB console screen?

John Topley
  • 113,588
  • 46
  • 195
  • 237

21 Answers21

286

On Mac OS X or Linux you can use Ctrl + L to clear the IRB screen.

John Topley
  • 113,588
  • 46
  • 195
  • 237
  • 11
    `Ctrl+L` also works in gnome-terminal, but something more programmatic is `system 'clear'` – vol7ron Jun 06 '13 at 15:54
  • With zsh ctrl + L doesn't work, ctrl + K does. (Oh My ZSH to be specific) – SidOfc Jul 20 '15 at 14:33
  • @SidneyLiebrand I tested on Oh My ZSH and only Ctrl + L worked – pluralism Mar 18 '16 at 00:50
  • 2
    @fanaugen On MacOS, `cmd+k` will clear all within a terminal tap, if you use tmux to split area of the visual area, `ctrl+L` will do a better work. – Fan Yer May 19 '17 at 09:06
  • 1
    I can confirm that this works on Windows 10 as well, both on the Command Prompt and the [WSL](https://learn.microsoft.com/en-us/windows/wsl/about) (running Ubuntu). In WSL, it pushes the prompt to the top (history still remains scrollable) but in Command Prompt, it wipes out all the history too. – ADTC Jun 08 '21 at 02:08
62

Throw this inside %userprofile%\.irbrc and you're good

def cls
  system('cls')
end

From IRB clear screen on windows.

Ben Hoffstein
  • 102,129
  • 8
  • 104
  • 120
46

On *nix boxes

`clear`

on Windows

system 'cls' # works
`cls` # does not work

on OSX

system 'clear' # works
`clear` # does not work
AShelly
  • 34,686
  • 15
  • 91
  • 152
25

Command + K in macOS works great.

Ronan Boiteau
  • 9,608
  • 6
  • 34
  • 56
user1323136
  • 889
  • 2
  • 11
  • 20
16

On Ubuntu 11.10 system clear will mostly clear the irb window. You get a return => True value printed.

A big mess of ugly text

ruby-1.9.2-p290 :007 > system 'clear'

what ya get:

 => true 
ruby-1.9.2-p290 :007 > 
John Conde
  • 217,595
  • 99
  • 455
  • 496
TW Scannell
  • 189
  • 1
  • 4
12

Just discovered this today: in Pry (an IRB alternative), a line of input that begins with a . will be forwarded to the command shell. Which means on Mac & Linux, we can use:

. clear

And, on Windows (Command Prompt and Windows Terminal), we can use:

. cls

Source: pry.github.io

i-s-o
  • 3
  • 3
Chandresh Pant
  • 1,173
  • 15
  • 19
12

In order to clear the screen just do:

puts "\e[H\e[2J"

P.S. This was tested on Linux.

the Tin Man
  • 158,662
  • 42
  • 215
  • 303
Sujit Kumar
  • 137
  • 1
  • 2
11
system 'clear'

Should work for rails 4.0 as well

Arvind singh
  • 1,312
  • 15
  • 15
9

On Linux Mint 17 also you can use Ctrl + Shift + L

or

Ctrl + L to clear the IRB screen.

thatway_3
  • 404
  • 1
  • 10
  • 22
6
puts `clear`

Clears the screen and then returns => nil Tested on Mac OSX 10.6 Terminal and iTerm2.

6

Method: def clear_screen if RUBY_PLATFORM =~ /win32|win64|\.NET|windows|cygwin|mingw32/i system('cls') else system('clear') end end

Or in IRB you can use system('clear')

Stephen Ross
  • 376
  • 4
  • 17
5

In windows, using Rails 4,

system('cls')

worked for me

Clay H
  • 651
  • 9
  • 21
4

Tons of good answers here, but I often remote into a linux box with Mintty from windows. Kudos to the above about using .irbrc, but came up with this:

def cls
  puts "\ec\e[3J"
end

def clear
  puts "\e[H\e[2Js"
end

This gives you the options for both the *nix 'clear' behavior and the Windows 'cls' behavior, which I often find more useful if I really want to nuke the buffer rather than just scrolling it out of view.

P.S. a similar variant also works in .bashrc:

alias cls='echo -e "\ec\e[3J"'

If anyone could find a way to actually map that to a keystroke, I'd love to hear it. I would really like to have something akin to cmd-k on osx that would work in Mintty.

Eric Haynes
  • 5,126
  • 2
  • 29
  • 36
3

Add the following method to ~/.irbrc:

def clear
  conf.return_format = ""
  system('clear')
end

Cntrl-L or Cntrl-K work in regular console but I'm using tmux and those mess the screen up inside the tmux window.

The conf.return_format = "" takes the nil off the return value.

TheFed
  • 31
  • 2
3

Windows users simply try,

system 'cls'

OR

system('cls')

Looks like this in the IRB window,

irb(main):333:0> system 'cls'
irb(main):007:0> system('cls')

Did the trick for me in ruby 1.9.3. However the following commands did not work and returned => nil,

system('clear')
system 'clear'
system `cls`       #using the backquotes below ESC Key in windows
Lucky
  • 16,787
  • 19
  • 117
  • 151
3

I've used this for executable files:

def clear
    system("cls") || system("clear") || puts("\e[H\e[2J")
end

clear
avinashbot
  • 1,177
  • 1
  • 11
  • 25
3
system 'cls' 

Works for me in Windows, with Ruby 2.2.0 and rails 4.0

saadibabar
  • 66
  • 4
1

I came here looking for a way to reset the tty with irb, since it wasn't printing newlines or showing what I typed somehow, only some output.

1.9.3-p125 :151 >   system 'reset'

finally did the trick for me!

Marcos
  • 4,796
  • 5
  • 40
  • 64
  • simplify it using back ticks: `\`reset\``. – the Tin Man Oct 27 '12 at 05:20
  • @the Tin Man - backticks don't always operate how you think, but ``reset`` should work fine – vol7ron Jun 06 '13 at 15:57
  • Backticks always work how I expect but then, I've been using them in various languages for years and years. – the Tin Man Jun 06 '13 at 16:17
  • Indeed, sometimes what resembles a backtick may indeed be some other UTF-8 creature. Occasionally I fix "text" docs with upper and lower quotation marks that are actually != the ANSI/ASCII " character. Like in commercial SRT files, where all hell breaks loose. – Marcos Jul 24 '14 at 08:30
0

For windows users:

If you create a bat file name c.bat whose contents are:

@echo off
cls

Then, in IRB, you can say:

system('c')

to clear the console. I just thought I would share because I thought that was pretty cool. Essentially anything in the path is accessible.

the Tin Man
  • 158,662
  • 42
  • 215
  • 303
0
->(a,b,c){x=a.method(b);a.send(c,b){send c,b,&x;false};print"\e[2J\e[H \e[D"}[irb_context,:echo?,:define_singleton_method]

This will fully clear your IRB screen, with no extra empty lines and “=> nil” stuff. Tested on Linux/Windows.

This one-liner could be expanded as:

lambda {
  original_echo = irb_context.method(:echo?)
  irb_context.send(:define_singleton_method, :echo?) {
    send :define_singleton_method, :echo?, &original_echo
    false
  }
  print "\e[2J\e[H \e[D"
}.call

This uses lots of tricks.

Firstly, irb will call echo? to check if the result should be printed. I saved the method, then redefined with a method which restores the defination but returns false so irb will not echo the result.

Secondly, I printed some ANSI control chars. \e[2J will clean the screen and \e[H will move the cursor to the upper left position of the screen. \e[D will print a space and then move back the cursor while this is a workaround for something strange on Windows.

Finally this is kind of not practical at all. Just smile ;)

orzFly
  • 166
  • 1
  • 7
-3

The backtick operator captures the output of the command and returns it

s = `cls`
puts s

would work better, I guess.

JesperE
  • 63,317
  • 21
  • 138
  • 197