Làm cách nào để điều hướng trong Tìm kiếm ngược của bash?


40

Bash cung cấp chức năng để đảo ngược tìm kiếm thông qua Ctrl+ R. Sau đó, người ta có thể gõ vào một phần của lệnh, nó sẽ hiển thị một mục phù hợp từ lịch sử.

Giả sử đây là lịch sử của tôi:

vim foo1
vim foo2 # I want to go here
vim foo3 # this is where I land, how to go back?

Tôi tìm kiếm foo. Đánh Ctrl+ Rmột lần nữa cho thấy mục tìm kiếm phù hợp tiếp theo. Thường thì điều đó xảy ra với tôi, rằng tôi quá nhanh và điều hướng qua kết quả dự định của mình và vim foo3được hiển thị và bây giờ tôi muốn quay lại vim foo2.

Do đó câu hỏi của tôi là: Làm thế nào để tôi điều hướng trong tìm kiếm ngược?


Bạn sử dụng thiết bị đầu cuối nào? Ví dụ. gnome-terminal, konsole, v.v ...
varesa

1
Chà, tôi không quá quen thuộc với nó ... Khóa nên là ctrl + S, nhưng một số thiết bị đầu cuối dường như ăn khóa, trước khi nó tìm kiếm ngược lại
varesa

Ctrl + shift + R - chuyển tiếp tìm kiếm trong khi ctrl + R
devansvd


Câu trả lời:


36

Bạn có thể truy cập thông qua forward-search-historychức năng được liên kết theo mặc định ctrl+s. Thật không may ctrl+sđược sử dụng để báo hiệu xofftheo mặc định, điều đó có nghĩa là bạn không thể sử dụng nó để thay đổi hướng tìm kiếm. Có hai giải pháp để giải quyết vấn đề, một là vô hiệu hóa việc gửi xoff/xontín hiệu và giải pháp khác là thay đổi liên kết phím choforward-search-history

Vô hiệu hóa xon / xoff

Chạy stty -ixontrong thiết bị đầu cuối của bạn hoặc thêm nó vào của bạn ~/.bashrc. Điều này cho phép bạn sử dụng ctrl+sđể sử dụng forward-search-historychức năng lịch sử.

Để biết thêm thông tin về luồng điều khiển, hãy xem Làm thế nào để giải phóng sau khi vô tình nhấn Ctrl-S trong một thiết bị đầu cuối? và một số câu trả lời

Thay đổi liên kết phím

Nếu bạn không muốn thay đổi hành vi mặc định của ctrl+sbạn có thể thay đổi keybinding cho forward-search-historyvới bind. Vì hầu hết các khóa đã được xác định trong bash, bạn có thể phải sáng tạo:

bind "\C-t":forward-search-history

Điều này sẽ liên kết ctrl+tvới lịch sử tìm kiếm chuyển tiếp, nhưng xin lưu ý rằng mỗi lần ctrl+tchạy mặc địnhtranspose-chars


Tôi cố gắng giải pháp đầu tiên của bạn stty -ixontrong zshvà nó hoạt động rất tốt. Tuy nhiên, có bất kỳ tác dụng phụ không mong muốn nào trong việc vô hiệu hóa xoff/xontín hiệu không?
sinh viên

@student Bạn không thể sử dụng ctrl+sđể tạm dừng đầu ra thiết bị đầu cuối nữa. Nếu bạn chưa từng sử dụng nó trước đây thì không vấn đề gì
Ulrich Dangel

1
Đối với những gì nó có giá trị, tôi đã đi với giải pháp thứ hai. Công cụ tuyệt vời ! Tôi không bao giờ biết bạn có thể đóng băng giao diện điều khiển bằng cách nhấn C-s.. rất hữu ích khi sử dụng đuôi trên nhật ký máy chủ. Khéo léo ! (Tôi ước mình có một upvote khác :))
Ashutosh Jindal

Tôi không thể có tùy chọn # 2 để làm việc trên OSX. Tôi đã phải làm điều này thay vào đó:bind '"\C-t": history-search-forward'
stiemannkj1

0

Thay thế cho tìm kiếm ngược cơ bản và tìm kiếm chuyển tiếp được cung cấp bởi bash của bạn, bạn có thể muốn xem xét:

fzf , một "công cụ tìm mờ dòng lệnh" tự mô tả.

Nó có thể thay thế tìm kiếm ngược mặc định của bash của bạn (và các thiết bị đầu cuối khác).

Lợi ích của nó là:

  • in một danh sách các lệnh của bạn từ lịch sử
    • bật tắt sắp xếp theo thứ tự thời gian hoặc mức độ liên quan bằng cách nhấn lại Ctrl + R
  • có thể được điều hướng thông qua các phím mũi tên (hoặc Ctrl + J / Ctrl + K)
  • cho phép tìm kiếm nhiều kim

Quy trình làm việc của tôi bây giờ hoàn toàn dựa vào fzf qua tìm kiếm ngược cơ bản trên các máy tôi có quyền kiểm soát.

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.