Czy istnieje sposób na użycie Ctrl-R po wpisaniu części polecenia w bash?


13

W bash polecenie Ctrl+ rjest bardzo przydatne, wpisuję Ctrl+ r whateveri przeszukuje moją historię w poszukiwaniu poleceń zawierających to słowo whatever. Ale jeśli napiszę whateveri zdam sobie sprawę, że chciałbym wyszukać to słowo i nacisnąć Ctrl+ rnic się nie dzieje.

Czy jest jakiś sposób, by uderzyć w klawisz i sprawić, żeby zachowywał się tak, jakbym wpisał Ctrl+ r whateverzamiast whatever Ctrl+ r?

Mam w swoim .inputrc:

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

ale działa to tylko wtedy, gdy początek linii jest taki sam.

Odpowiedzi:


12

Możesz przeszukiwać historię bash, korzystając z tego, co już wpisałeś.

Załóżmy, że właśnie wpisałeś curl -I http://superuser.comi zapomniałeś wpisać Ctrl+ r:

$ curl -I http://superuser.com

Jeśli chcesz przeprowadzić wyszukiwanie w swojej historii, przejdź do początku wiersza w pierwszej kolejności ( Ctrl+ a), wpisz i-search ( Ctrl+ r) i wpisz Ctrl+ y. Powinno to przeprowadzić wyszukiwanie przy użyciu zawartości całego wpisanego już tekstu:

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

Alternatywnie możesz użyć Ctrl+ wzamiast Ctrl+, yaby wyszukać, używając tylko pierwszego słowa wpisanego tekstu:

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

Powiązanie wszystkiego do jednego klucza

Jeśli chcesz to wszystko zrobić jednym naciśnięciem klawisza, możesz powiązać pojedynczy klawisz z makrem klawiatury. Jeśli chcesz użyć, powiedzmy, F12uruchom:

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

To potrwa do sesji.

Czyni to na stałe

Po prostu zdefiniuj makro w swoim ~/.inputrc:

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

Zauważ, że tutaj pomijamy pojedyncze cudzysłowy.

Ta odpowiedź może być przydatna.


1
Nie jestem pewien, czy jest to problem z moją konfiguracją, ale po c-rwpisaniu wpisanie c-yniczego tam nie wkleja. Jeśli piszę c-ysam, po prostu wkleja tekst, więc nie mogę łączyć dwóch poleceń ...
— przeglądałem

Czy najpierw przejdziesz do początku linii? (Ca)
— hso

1
Masz rację, nie miałem zamiaru zaczynać linii. Teraz mam w moim .inputrc "\C-xr": "\C-a\C-r\C-y"i działa bardzo dobrze! Dziękuję za tę odpowiedź.
— skeept

Wydaje mi się, że po raz trzeci googlowałem to control+a control+r control+y! Dzięki, ta odpowiedź jest zawsze dostępna! :)
— Dr Beco,

2

Zaoszczędź cztery ostrzeżenia:

Unikaj sekundy Ctrl-R, dodając do swojego .bashrc(lub do swojego, .inputrcjeśli wolisz):

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

Spowoduje to zmapowanie ALT-R do CTR-A CTR-R CTR-Y CTR-R

Opis:

  • ALT-R : klucz powiązania. Inną dobrą opcją jest \C-xr( CTR-X CTR-R )
  • CTR-A : Przejdź na początek linii (zapamiętywanie tego, co jest napisane)
  • CTR-R : Rozpocznij wyszukiwanie do tyłu
  • CTR-Y : Wklej to, co CTR-A zapamiętał podczas wyszukiwania
  • CTR-R : Uruchamia wyszukiwanie do tyłu z dotychczasowymi postaciami

Nadal nie jest dla mnie jasne, dlaczego Cy wkleja polecenie w pole wyszukiwania (Ca nie powinno być poleceniem „kopiuj”, prawda?) I dlaczego Cw wkleja tylko pierwsze słowo.
— marcus

tak, C-anie tylko się porusza, ale zapamiętuje (kopiuje) przenoszoną treść.
— Dr Beco

Nie mogę potwierdzić tego zachowania (wystarczy wypróbować Ca Cy), myślę, że bardziej prawdopodobne jest, że Cr ma wbudowane specjalne przypadki, ale nie wiem, gdzie są udokumentowane.
— marcus
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.