2011-01-12 26 views
5

Nếu tôi thực hiện tìm kiếm tương tác ngược trong irb và sau đó nhập một ký tự điều khiển (các phím mũi tên là những cái duy nhất tôi đã thấy với thực tế). Vì vậy, tôi bắt đầu với phiên này:Tại sao irb chèn ký tự điều khiển vào bộ đệm tìm kiếm tương tác ngược của tôi?

$ irb 
>> print "hello" 
hello 

sau đó nhập ^r, h

$ irb 
>> print "hello" 
hello 
(reverse-i-search)`he': print "hello" 

Cho đến nay rất tốt. Sau đó, tôi nhấn mũi tên trái, và tôi kết thúc với điều này:

$ irb 
>> print "hello" 
hello 
>> print "[Dhello" 

Sử dụng tiếp theo các mũi tên di chuyển con trỏ xung quanh bình thường.

+2

Tôi đề nghị bạn thêm thẻ 'readline'. –

Trả lời

3

này sẽ không giải quyết được vấn đề của bạn, nhưng ít nhất tôi có thể trả lời những câu hỏi mà bạn hỏi (Tại sao):

Mũi tên trái được nhập vào thiết bị đầu cuối như ba nhân vật, ESC, [, và D. (Bạn có thể kiểm tra điều này bằng cách gõ read và nhấn vào mũi tên bên trái, hiển thị ^[[D, nơi ^[ là cách các ký tự thoát được trả lại.)

bằng cách nào đó irb nhặt nhân vật ESC khi nó không nên; do đó ESC kết thúc tìm kiếm lịch sử và [D được nhập theo nghĩa đen. Nhìn vào các chương trình khác bằng cách sử dụng readline, Bash và Python hoạt động chính xác, nhưng ledit (yeah, tối nghĩa - xin lỗi ^^) cũng gặp vấn đề này.

Trừ khi ai đó biết giải pháp cho điều này, giải pháp thay thế duy nhất tôi có thể nghĩ là nhấn ESC thay vì phím mũi tên để thoát khỏi tìm kiếm lịch sử. Hoặc nhấn enter nếu bạn không cần phải chỉnh sửa thêm nữa, tất nhiên.

+1

Tôi không biết/nhận ra rằng nhấn ESC sẽ chọn mục lịch sử và cũng để lại con trỏ của tôi tại chỗ, do đó bản thân nó rất hữu ích. (Tôi đã làm điều khiển-a hoặc kiểm soát-e) –

1

Bạn đã bật chế độ chỉnh sửa vi chưa?

~ $ irb 
1.9.3p392 :001 > Readline.vi_editing_mode? 
    => true 

Tôi đã bật tính năng này trong $HOME/.inputrc tệp qua set editing-mode vi. Vô hiệu hóa nó "cố định" phím mũi tên của tôi.

Như đã đề cập bởi @JoLiss, các chương trình readline khác (bash, v.v.) cũng hoạt động chính xác; AFAICT, đó là một vấn đề của Ruby. Xem: http://bugs.ruby-lang.org/issues/7859#change-36333

Các vấn đề liên quan