Jak nawigować w ramach wyszukiwania wstecznego bash?


40

Bash oferuje funkcję odwracania wyszukiwania za pomocą Ctrl+ R. Następnie można wpisać część polecenia, która wyświetli odpowiedni wpis z historii.

Załóżmy, że to moja historia:

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

Szukam foo. Wciśnięcie Ctrl+ Rponownie pokazuje następny pasujący wpis wyszukiwania. Często zdarza mi się, że jestem zbyt szybki i przechodzę obok zamierzonego wyniku i vim foo3jest wyświetlany, a teraz chcę wrócić vim foo2.

Dlatego moje pytanie brzmi: jak nawigować w ramach wyszukiwania wstecznego?


Z którego terminala korzystasz? Na przykład. gnome-terminal, konsola itd.
varesa

1
No cóż, nie znam się zbytnio na nim ... Kluczem powinno być ctrl + S, ale niektóre terminale wydają się zjadać klucz, zanim dojdzie do wyszukiwania wstecznego
varesa

Ctrl + shift + R - wyszukiwanie do przodu, podczas gdy Ctrl + R
devansvd


Odpowiedzi:


36

Możesz uzyskać do niego dostęp za pomocą forward-search-historyfunkcji domyślnie powiązanej ctrl+s. Niestety ctrl+sjest xoffdomyślnie używany do sygnalizowania, co oznacza, że ​​nie można go użyć do zmiany kierunku wyszukiwania. Istnieją dwa rozwiązania rozwiązania problemu, jeden wyłącza wysyłanie xoff/xonsygnalizacji, a drugi zmienia przypisanie klawiszyforward-search-history

Wyłącz xon / xoff

Uruchom stty -ixonw swoim terminalu lub dodaj go do swojego ~/.bashrc. Umożliwia to ctrl+skorzystanie z forward-search-historyfunkcji historii.

Aby uzyskać więcej informacji o przepływie sterowania, zobacz Jak odblokować po przypadkowym naciśnięciu Ctrl-S w terminalu? i niektóre odpowiedzi

Zmień skrót klawiszowy

Jeśli nie chcesz zmieniać domyślnego zachowania ctrl+s, możesz zmienić przypisanie klawiszy za forward-search-historypomocą bind. Ponieważ większość kluczy jest już zdefiniowana w bash, może być konieczne uzyskanie kreatywności:

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

Spowoduje to powiązanie ctrl+tz historią wyszukiwania do przodu, ale pamiętaj, że domyślnie ctrl+tdziałatranspose-chars


Próbowałem swoje pierwsze rozwiązanie stty -ixonw zshi działa bardzo dobrze. Czy są jednak jakieś niepożądane skutki uboczne w wyłączaniu xoff/xonsygnalizacji?
student

@student Nie można już używać ctrl+sdo wstrzymywania wyjścia terminala. Jeśli nigdy wcześniej go nie
używałeś,

1
Za to, co jest warte, wybrałem drugie rozwiązanie. Świetna sprawa ! Nigdy nie wiedziałem, że możesz zawiesić konsolę, naciskając C-s.. bardzo przydatne, gdy używasz taila na logach serwera. Schludnie! (Chciałbym mieć kolejny głos :))
Ashutosh Jindal,

Nie mogłem dostać opcji nr 2 do pracy na OSX. Musiałem to zrobić zamiast tego:bind '"\C-t": history-search-forward'
stiemannkj1

0

Jako alternatywę dla podstawowego wyszukiwania wstecznego i wyszukiwania do przodu zapewnianego przez twoją wersję bash, możesz zajrzeć do:

fzf , samozwańczy „program do wyszukiwania rozmytych wierszy poleceń”.

Może zastąpić domyślne wyszukiwanie wsteczne twojego basha (i innych terminali).

Jego zalety to to, że:

  • wypisuje listę twoich poleceń z historii
    • przełącza sortowanie chronologiczne lub według trafności, naciskając ponownie Ctrl + R
  • można nawigować za pomocą klawiszy strzałek (lub Ctrl + J / Ctrl + K)
  • pozwala na wyszukiwanie wielu igieł

Mój obieg pracy całkowicie polega teraz na fzf nad podstawowym wyszukiwaniem wstecznym na maszynach, nad którymi mam kontrolę.

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.