Làm cách nào để chuyển tiếp tìm kiếm lịch sử với lệnh đảo ngược i-search (ctrl + r)?


12

Trong hướng dẫn đọc

# man readline

Dưới đây mô tả cách tìm kiếm lùi và tiến.

reverse-search-history (C-r)
Search backward starting at the current line and moving `up' through the history as necessary.  This is an incremental search.

forward-search-history (C-s)
Search forward starting at the current line and moving `down' through the  history  as  necessary.   This  is  an  incremental search.

Khi tôi nhấn ctrl + r và gõ "apt-get", tôi có thể thực hiện tìm kiếm ngược lịch sử bằng cách nhấn liên tục vào ctrl + r. Nhưng sau đó tôi nhấn ctrl + s và thiết bị đầu cuối không đi tiếp. Tôi đang làm gì đó không đúng?

Ngoài ra, tiền tố Meta "M-" đại diện cho khóa nào?

Câu trả lời:


15

Trình tự C-sđược lấy từ trình điều khiển thiết bị đầu cuối, như bạn có thể thấy từ

stty -a | grep '\^S'

Để giải phóng chuỗi để sử dụng theo đường dẫn, hãy đặt chuỗi đầu cuối dừng thành một số chuỗi khác, ví dụ như

stty stop ^J

hoặc loại bỏ nó hoàn toàn với

stty stop undef

Sau đó C-ssẽ làm việc trong các thiết bị đầu cuối nhất định.

Đặt nó vào ~/.bashrcđể làm cho nó hoạt động trong mọi thiết bị đầu cuối.

Trình M-tự có nghĩa là Altchìa khóa, như đã lưu ý.


^ J là một lựa chọn tốt vì stopnó không được sử dụng cho bất cứ điều gì khác
hobs

3

Ngoài việc chỉ định một char 'stop' TTY khác như được đề xuất ở trên, bạn có thể xóa nó hoàn toàn nếu bạn không có kế hoạch sử dụng nó (tôi có xu hướng không), như thế này:

$ stty stop undef

Sau đó, đường dẫn có thể sử dụng các điều khiển để tìm kiếm chuyển tiếp và bạn sẽ không gặp phải bất kỳ hành vi lạ nào do lệnh dừng mới được thêm vào.


Đây là một cách tốt hơn nhiều.
A.Danischewski

1

chuyển tiếp tìm kiếm lịch sử (Cs) không hoạt động (mặc dù nó nằm trong trang man).

'M-' đại diện cho công cụ sửa đổi phím Alt.


1
Không sửa C-sphần, xem câu trả lời của tôi.
enzotib

0

Xin đừng sử dụng:

stty stop ^J

nhưng

stty stop ^P

hoặc bất cứ điều gì khác, như ^Jlàm cho vấn đề lớn với ssh. (Tôi không biết tại sao.) Sau khi tôi đăng nhập Entervà dấu gạch chéo ngược không hoạt động. hoặc tôi phải gõ:

stty sane 
export TERM=linux

trước khi tôi muốn gõ

ssh root@192...

vì thế

stty stop ^P

giải quyết cả hai vấn đề cùng một lúc.


0

Bạn có thể tắt điều khiển luồng XON / XOFF:

stty -ixon

trong ~ / .profile hoặc tương tự, thì Ctrl + S sẽ được nhận dạng.

Thí dụ


0

Để chuyển tiếp khi sử dụng tìm kiếm ngược (với lệnh Ctrl-R):

  1. Mở tệp .bashrc của bạn:
    sudo gedit ~/.bashrc

  2. thêm dòng này (chữ "f" có thể được thay thế bằng dòng khác chưa được sử dụng bởi hệ thống)

    bind '"\C-f": forward-search-history' 
    
  3. Đóng tệp của bạn và cập nhật .bashrc (hoặc mở một thiết bị đầu cuối khác) bằng lệnh:
    source ~/.bashrchoặc. ~/.bashrc

NGAY BÂY GIỜ BẠN CÓ THỂ CHUYỂN ĐỔI TRONG LỊCH SỬ VỚI SHORTCUT: Ctrl + f

Làm việc trên Ubuntu 18.04 LTS


0

Lưu ý rằng tôi đã sử dụng

stty stop ^J
stty -ixoff

trong .bashrc để cho phép tìm kiếm chuyển tiếp và vô hiệu hóa thông báo "Đầu ra bị treo bằng cách nhấn Ctrl + S. Nhấn Ctrl + Q để tiếp tục" trong Konsole khi nhấn ctrl + s, nhưng cả hai lệnh đều phá vỡ tích hợp Konsole trong Cá heo ( phím tắt "F4" theo cách mà tôi đã phải thực hiện ctrl + c hai lần để làm cho nó hoạt động bình thường và các lệnh "cd" tự động không được đưa vào khi điều hướng bằng đồ họa.

Vì vậy, bây giờ tôi thích:

stty stop undef
stty -ixon

Nó có tác dụng tương tự, tất cả dường như hoạt động như mong đợi;)

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.