Jak przeszukać historię wyszukiwania za pomocą polecenia reverse-i-search (ctrl + r)?

12

W podręczniku readline

# man readline

Poniżej opisano, jak wyszukiwać wstecz i do przodu.

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.

Kiedy nacisnę ctrl + r i napiszę „apt-get”, jestem w stanie zrobić historię wyszukiwania wstecz, ciągle naciskając ctrl + r. Ale potem stukam ctrl + s, a terminal nie idzie do przodu. Czy robię coś niewłaściwego?

Jaki klucz reprezentuje także przedrostek „M-” Meta?

użytkownik784637
źródło

Odpowiedzi:

15

Sekwencja C-sjest pobierana ze sterownika terminala, jak widać z

stty -a | grep '\^S'

Aby zwolnić sekwencję do użycia przez readline, ustaw sekwencję końcową zatrzymania na inną sekwencję, na przykład

stty stop ^J

lub usuń go całkowicie za pomocą

stty stop undef

Potem C-sbędzie działać w danym terminalu.

Ustaw go, ~/.bashrcaby działał na każdym terminalu.

M-Sekwencja oznacza Altklucz, jak już wspomniano.

enzotib
źródło
^ J to dobry wybór stop, ponieważ nie służy do niczego innego
płyt
3

Oprócz przypisania innego znaku „stop” TTY, jak sugerowano powyżej, możesz go całkowicie usunąć, jeśli nie planujesz go używać (zazwyczaj tego nie robię):

$ stty stop undef

Zatem readline może używać kontrolek do wyszukiwania do przodu i nie uzyskasz żadnego dziwnego zachowania z powodu dodania nowego znaku stop.

ntnt
źródło
To znacznie lepszy sposób.
A.Danischewski
1

Historia wyszukiwania do przodu (Cs) nie działa (chociaż znajduje się na stronie man).

„M-” oznacza modyfikator klawisza Alt.

Gödel
źródło
1
Nie popraw tej C-sczęści, patrz moja odpowiedź.
enzotib
0

Proszę nie używać:

stty stop ^J

ale

stty stop ^P

lub cokolwiek innego, ponieważ ^Jsprawia duże problemy z ssh. (W każdym razie nie wiem dlaczego.) Po zalogowaniu Enteri ukośnik odwrotny nie działał. lub musiałem wpisać:

stty sane 
export TERM=linux

zanim chciałem pisać

ssh root@192...

więc

stty stop ^P

rozwiązał oba problemy jednocześnie.

kserostomus
źródło
0

Możesz wyłączyć kontrolę przepływu XON / XOFF:

stty -ixon

w twoim ~ / .profile lub podobnym, wtedy Ctrl + S zostanie rozpoznany.

Przykład

Steven Penny
źródło
0

Aby przejść do przodu podczas korzystania z wyszukiwania wstecznego (z poleceniem Ctrl-R):

  1. Otwórz plik .bashrc:
    sudo gedit ~/.bashrc

  2. dodaj ten wiersz (literę „f” można zastąpić inną, jeszcze nie używaną przez system)

    bind '"\C-f": forward-search-history' 
    
  3. Zamknij plik i zaktualizuj .bashrc (lub otwórz inny terminal) za pomocą polecenia:
    source ~/.bashrclub. ~/.bashrc

TERAZ MOŻESZ PRZESUWAĆ HISTORIĘ W SKRÓCIE: Ctrl + f

Praca na Ubuntu 18.04 LTS

Franklin TN
źródło
0

Zauważ, że użyłem

stty stop ^J
stty -ixoff

w .bashrc, aby włączyć wyszukiwanie do przodu i wyłączyć irytujący komunikat „Wyjście zostało zawieszone przez naciśnięcie Ctrl + S. Naciśnij Ctrl + Q, aby wznowić” komunikat w Konsole po naciśnięciu klawiszy Ctrl + s, ale oba polecenia indywidualnie przerwały integrację Konsoli w Dolphin ( skrót „F4”) w sposób, w jaki musiałem dwa razy nacisnąć ctrl + c, aby go wyrównać, a automatyczne polecenia „cd” nie były wstrzykiwane podczas nawigacji graficznej.

Więc teraz wolę:

stty stop undef
stty -ixon

Ma ten sam efekt, wszystko wydaje się działać zgodnie z oczekiwaniami;)

NoGa
źródło