Có cách nào sử dụng ctrl-r sau khi gõ một phần lệnh trong bash không?


13

Trong bash, lệnh Ctrl+ rrất hữu ích, tôi gõ Ctrl+ r whatevervà nó tìm kiếm lịch sử của tôi cho các lệnh có chứa từ đó whatever. Nhưng nếu tôi gõ whatevervà nhận ra rằng tôi muốn tìm kiếm từ đó và nhấn Ctrl+ rkhông có gì xảy ra.

Có cách nào nhấn phím và để nó hoạt động như thể tôi đã gõ Ctrl+ r whateverthay vì whatever Ctrl+ rkhông?

Tôi có những điều sau đây .inputrc:

"\C-p": history-search-backward

nhưng điều này chỉ hoạt động nếu đầu dòng là như nhau.

Câu trả lời:


12

Bạn có thể tìm kiếm lịch sử của bash bằng cách sử dụng những gì bạn đã gõ dễ dàng.

Giả sử bạn vừa gõ curl -I http://superuser.comvà bạn quên gõ Ctrl+ rtrước:

$ curl -I http://superuser.com

Nếu bạn muốn thực hiện tìm kiếm i trong lịch sử của mình, hãy đi đến đầu dòng trước ( Ctrl+ a), nhập i-search ( Ctrl+ r) và nhập Ctrl+ y. Điều này sẽ tìm kiếm bằng cách sử dụng nội dung của toàn bộ văn bản bạn đã nhập:

(reverse-i-search)`curl -I http://superuser.com': curl -I http://superuser.com/faq

Ngoài ra, bạn có thể sử dụng Ctrl+ wthay vì Ctrl+ yđể tìm kiếm chỉ bằng từ đầu tiên của văn bản bạn vừa nhập:

(reverse-i-search)`curl': curl -I http://superuser.com/faq

Liên kết tất cả vào một phím duy nhất

Nếu bạn muốn thực hiện tất cả điều này trong một lần nhấn phím, bạn có thể liên kết một phím duy nhất với macro bàn phím. Nếu bạn muốn sử dụng, hãy nói, F12chạy:

$ bind '"\e[24~":"\C-a\C-r\C-y"'

Điều đó sẽ kéo dài cho phiên.

Làm cho nó vĩnh viễn

Chỉ cần xác định macro trong ~/.inputrc:

"\e[24~":"\C-a\C-r\C-y"

Lưu ý rằng ở đây chúng tôi bỏ qua các dấu ngoặc đơn.

Bạn có thể thấy câu trả lời này hữu ích.


1
Tôi không chắc đó có phải là vấn đề với cấu hình của mình không, nhưng sau khi tôi c-rgõ, gõ c-ykhông dán gì ở đó. Nếu tôi tự gõ c-ychỉ cần dán văn bản, vì vậy tôi không thể kết hợp hai lệnh ...
xiên

Bạn có đi đến đầu dòng không? (Ca)
vào

1
Bạn nói đúng, tôi sẽ không bắt đầu dòng. Bây giờ tôi có trong .inputrc của tôi "\C-xr": "\C-a\C-r\C-y"và nó hoạt động rất tốt! Cảm ơn câu trả lời này.
xiên

Tôi nghĩ rằng đây là lần thứ ba tôi googled điều này control+a control+r control+y! Cảm ơn câu trả lời này luôn ở đây! :)
Bác sĩ Beco

2

Lưu bốn lần đình công:

Tránh một giây Ctrl-Rbằng cách thêm vào .bashrc(hoặc vào của bạn .inputrcnếu bạn thích):

bind '"\er":"\C-a\C-r\C-y\C-r"' # alt-r = ctr-a ctr-r ctr-y ctr-r

Điều này sẽ ánh xạ ALT-R sang TLB-A TLB-R TLB-R

Sự miêu tả:

  • ALT-R : khóa liên kết. Một tùy chọn tốt khác là \C-xr( CTR-X CTR-R )
  • CTR-A : Đi đến đầu dòng (ghi nhớ những gì được viết)
  • CTR-R : Bắt đầu tìm kiếm ngược
  • CTR-Y : Dán những gì CTR-A ghi nhớ như một phần của tìm kiếm
  • CTR-R : Kích hoạt tìm kiếm ngược với các ký tự cho đến nay

Tôi vẫn chưa rõ tại sao Cy dán lệnh vào trường tìm kiếm (Ca không phải là lệnh "sao chép" phải không?) Và tại sao Cw chỉ dán từ đầu tiên.
marcus

có, C-akhông chỉ di chuyển, mà còn ghi nhớ (sao chép) nội dung được chuyển qua.
Bác sĩ Beco

Tôi không thể xác nhận hành vi đó (chỉ cần thử Ca Cy), tôi nghĩ rằng nhiều khả năng Cr có một số trường hợp đặc biệt được xây dựng, nhưng tôi không biết chúng được ghi lại ở đâu.
marcus
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.