Làm thế nào để bạn xóa bảng điều khiển IRB?


186

Làm thế nào để bạn xóa màn hình giao diện điều khiển IRB?

Câu trả lời:


267

Trên Mac OS X hoặc Linux, bạn có thể sử dụng Ctrl+ Lđể xóa màn hình IRB .


8
Ctrl+Lcũng hoạt động trong thiết bị đầu cuối gnome, nhưng một cái gì đó có lập trình hơnsystem 'clear'
vol7ron

Với zsh ctrl + L không hoạt động, ctrl + K cũng vậy. (Cụ thể là ZSH của tôi)
SidOfc 20/07/2015

@SidneyLiebrand Tôi đã thử nghiệm trên Oh My ZSH và chỉ Ctrl + L hoạt động
đa nguyên

2
@fanaugen Trên MacOS, cmd+ksẽ xóa tất cả trong một thiết bị đầu cuối, nếu bạn sử dụng tmux để phân chia khu vực thị giác, ctrl+Lsẽ làm việc tốt hơn.
Fan Yer

59

Ném nó vào trong %userprofile%\.irbrcvà bạn tốt

def cls
  system('cls')
end

Từ IRB xóa màn hình trên windows .


13
Tôi nên làm rõ rằng điều này chỉ áp dụng cho Windows.
Ben Hoffstein

8
system('clear')cũng sẽ hoạt động trên máy Mac. Cần lưu ý rằng điều này sẽ để lại => trueở đầu của giao diện điều khiển.
Michael Dorst

1
@anthropomorphic `system ('Clear') sẽ hoạt động trên hầu hết mọi hệ thống giống Unix / Unix.
enedil

@enedil Điều đó hoàn toàn đúng, tuy nhiên nhiều người không biết rằng OS X là một hệ thống giống Unix.
Michael Dorst

@anthropomorphic vì không phải . OS X được chứng nhận Unix bởi Open Group.
enedil

41

Trên hộp * nix

`clear`

trên Windows

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

trên OSX

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

3
Vâng, điều này không làm việc. Phải làm system('clear')hoặc Ctrl+L
Connor Leech

system 'clear'làm việc cho tôi nhưng tôi đã nhận được: command not found => false
echo

1
Bạn có thể thêm một bí danh như cleartập tin pryrc của bạn cho việc này. Cảm ơn đã chia sẻ
James Klein


16

Trên hệ thống Ubuntu 11.10 clearsẽ xóa cửa sổ irb. Bạn được trả lại=> True giá trị được in.

Một mớ hỗn độn lớn của văn bản xấu xí

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

những gì bạn nhận được:

 => true 
ruby-1.9.2-p290 :007 > 

10

Mới phát hiện ra điều này ngày hôm nay: Trong Pry (một thay thế IRB), một dòng đầu vào bắt đầu bằng một .sẽ được chuyển tiếp đến vỏ lệnh. Có nghĩa là trong mac & Linux, chúng ta có thể sử dụng:

. clear

Cập nhật: Thật không may, nó dường như không hoạt động trên Windows.

Nguồn: Pryrepl.org


Tôi vừa thử điều này bằng cách sử dụng irb thô trong Ruby 2.0.0p481 trên Windows và nó không hoạt động.
John Topley

Đúng. Có vẻ như nó không hoạt động trong windows. Nhưng nó chắc chắn hoạt động trong mac & Linux.
Chandresh Pant

Tôi thích câu trả lời này tốt nhất. Bạn không phải sửa đổi bất cứ điều gì và nó chỉ cần tách ra. Đơn giản để nhớ quá. Btw, . clsnên hoạt động trên Windows.
Eric Boehs

Tôi tự hỏi lệnh nào sẽ làm việc với tmux. Tôi nghĩ rằng Ctrl + L là cái mà asway_3 nói bên dưới.
Pablo

9

Để xóa màn hình, chỉ cần làm:

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

PS Điều này đã được thử nghiệm trên Linux.


Đây chỉ là đầu ra từ `clear`, và tương đương với puts %x(/usr/bin/clear).
Todd A. Jacobs


8

Trên Linux Mint 17 bạn cũng có thể sử dụng Ctrl+ Shift+L

hoặc là

Ctrl+ L để xóa màn hình IRB.


Đã hoạt động cho Mac OS X.11.1 trong ứng dụng Terminal
Patrick

@ thatway_3 - Câu trả lời hay: bạn đã in hướng dẫn bàn phím trên Stackoverflow như thế nào?
BKSpurgeon


6

Phương pháp: def clear_screen if RUBY_PLATFORM =~ /win32|win64|\.NET|windows|cygwin|mingw32/i system('cls') else system('clear') end end

Hoặc trong IRB bạn có thể sử dụng system('clear')



3

Thêm phương thức sau vào ~/.irbrc:

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

Cntrl-L hoặc là Cntrl-K làm việc trong bảng điều khiển thông thường nhưng tôi đang sử dụng tmux và những thứ đó làm rối màn hình bên trong cửa sổ tmux.

Các conf.return_format = "" lấy con số không ra khỏi giá trị trả về.


3

Người dùng Windows chỉ cần thử,

system 'cls'

HOẶC LÀ

system('cls')

Trông như thế này trong cửa sổ IRB,

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

Đã lừa tôi trong ruby ​​1.9.3. Tuy nhiên, các lệnh sau không hoạt động và trả về => nil,

system('clear')
system 'clear'
system `cls`       #using the backquotes below ESC Key in windows

3

Tôi đã sử dụng điều này cho các tập tin thực thi:

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

clear


1

Tôi đến đây để tìm cách thiết lập lại tty bằng irb, vì nó không in dòng mới hoặc hiển thị những gì tôi đã nhập bằng cách nào đó, chỉ một số đầu ra.

1.9.3-p125 :151 >   system 'reset'

cuối cùng đã làm mẹo cho tôi!


đơn giản hóa nó bằng cách sử dụng tick lại : `reset`.
Tin Man

@ The Tin Man - backticks không phải lúc nào cũng hoạt động như bạn nghĩ, nhưng resetnên hoạt động tốt
vol7ron

Backticks luôn hoạt động như tôi mong đợi nhưng sau đó, tôi đã sử dụng chúng bằng nhiều ngôn ngữ trong nhiều năm và nhiều năm.
Tin Man

Thật vậy, đôi khi những gì giống với backtick thực sự có thể là một số sinh vật UTF-8 khác. Thỉnh thoảng tôi sửa các tài liệu "văn bản" bằng dấu ngoặc kép trên và dưới thực sự! = Ký tự ANSI / ASCII ". Giống như trong các tệp SRT thương mại, nơi tất cả địa ngục vỡ ra.
Marcos

1

Hàng tấn câu trả lời hay ở đây, nhưng tôi thường từ xa vào một hộp linux với Mintty từ windows. Kudos nói ở trên về việc sử dụng .irbrc, nhưng đã đưa ra điều này:

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

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

Điều này cung cấp cho bạn các tùy chọn cho cả hành vi * nix 'rõ ràng và hành vi' cls 'của Windows, điều mà tôi thường thấy hữu ích hơn nếu tôi thực sự muốn nuke bộ đệm thay vì chỉ cuộn nó ra khỏi tầm nhìn.

PS một biến thể tương tự cũng hoạt động trong .bashrc:

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

Nếu bất cứ ai cũng có thể tìm ra cách thực sự ánh xạ nó tới tổ hợp phím, tôi rất muốn nghe nó. Tôi thực sự muốn có một cái gì đó giống với cmd-k trên osx sẽ hoạt động trong Mintty.


0

Đối với người dùng windows:

Nếu bạn tạo một tên tập tin bat c.bat có nội dung là:

@echo off
cls

Sau đó, trong IRB, bạn có thể nói:

system('c')

để xóa giao diện điều khiển. Tôi chỉ nghĩ rằng tôi sẽ chia sẻ bởi vì tôi nghĩ rằng đó là khá mát mẻ. Về cơ bản bất cứ điều gì trong đường dẫn có thể truy cập.


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]

Điều này sẽ xóa hoàn toàn màn hình IRB của bạn, không có thêm dòng trống nào và những thứ khác => nil. Đã thử nghiệm trên Linux / Windows.

Điều này có thể được mở rộng như:

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

Điều này sử dụng rất nhiều thủ thuật.

Đầu tiên, irb sẽ gọi echo?để kiểm tra xem kết quả có được in hay không. Tôi đã lưu phương thức, sau đó xác định lại bằng phương thức khôi phục lại định nghĩa nhưng trả về false để irb sẽ không lặp lại kết quả.

Thứ hai, tôi đã in một số ký tự điều khiển ANSI. \e[2Jsẽ làm sạch màn hình và \e[Hsẽ di chuyển con trỏ đến vị trí trên bên trái của màn hình. \e[Dsẽ in một khoảng trắng và sau đó di chuyển trở lại con trỏ trong khi đây là cách giải quyết cho một cái gì đó lạ trên Windows.

Cuối cùng thì đây là loại không thực tế chút nào. Chỉ cười thôi;)


-3

Toán tử backtick nắm bắt đầu ra của lệnh và trả về nó

s = `cls`
puts s

Tôi sẽ làm việc tốt hơn, tôi đoán.


1
Điều này không thành công: Bạn nhận được irb này (chính): 004: 0> cls=> "\ f"
Orion Edwards

@OrionEdwards @JesperE dòng đầu tiên cho tôi biết "\f"đó là những gì bạn nhận được và sau đó puts sxuất ra cái này tôi tự hỏi tại sao?
May mắn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.