Como avançar-search-history com o comando reverse-i-search (ctrl + r)?

12

No manual readline

# man readline

A seguir, descreve como procurar para trás e para frente.

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.

Quando clico em Ctrl + R e digito "apt-get", sou capaz de fazer um histórico de pesquisa reversa tocando continuamente em Ctrl + R. Mas, então, toco em Ctrl + s e o terminal não avança. Estou fazendo algo incorreto?

Também qual chave o prefixo Meta "M-" representa?

user784637
fonte

Respostas:

15

A sequência C-sé obtida no driver do terminal, como você pode ver em

stty -a | grep '\^S'

Para liberar a sequência para uso pela linha de leitura, defina a sequência do terminal de parada como outra sequência, como por exemplo

stty stop ^J

ou remova-o completamente com

stty stop undef

Depois disso C-sfuncionaria no terminal fornecido.

Coloque-o ~/.bashrcpara que ele funcione em todos os terminais.

A M-sequência significa a Altchave, como já observado.

enzotib
fonte
^ J é uma boa escolha uma vez que para stop, ele não é usado para qualquer outra coisa
Placas
3

Além de atribuir um caractere TTY 'stop' diferente, conforme sugerido acima, você pode removê-lo completamente se não planeja usá-lo (eu costumo não usar), assim:

$ stty stop undef

O readline pode usar control-s para pesquisa direta e você não terá nenhum comportamento estranho devido à adição de um novo caractere de parada.

ntnt
fonte
Esta é uma maneira muito melhor.
A.Danischewski
1

o histórico de pesquisa direta (Cs) não funciona (embora esteja na página do manual).

'M-' representa o modificador de tecla Alt.

Gödel
fonte
1
Não está correto a C-sparte, veja minha resposta.
enzotib 5/09/11
0

Por favor não use:

stty stop ^J

mas

stty stop ^P

ou qualquer outra coisa, pois ^Jcria grandes problemas com o ssh. (Eu não sei por que, de qualquer maneira.) Depois que eu entrei Entere a barra invertida não estava funcionando. ou eu tive que digitar:

stty sane 
export TERM=linux

antes que eu quisesse digitar

ssh root@192...

então

stty stop ^P

resolveu os dois problemas ao mesmo tempo.

xerostomus
fonte
0

Você pode desativar o controle de fluxo XON / XOFF:

stty -ixon

no seu perfil ~ /. ou similar, então Ctrl + S será reconhecido.

Exemplo

Steven Penny
fonte
0

Para avançar ao usar a pesquisa reversa (com o comando Ctrl-R):

  1. Abra o seu arquivo .bashrc:
    sudo gedit ~/.bashrc

  2. adicione esta linha (a letra "f" pode ser substituída por outra ainda não usada pelo sistema)

    bind '"\C-f": forward-search-history' 
    
  3. Feche seu arquivo e atualize seu .bashrc (ou abra outro terminal) com o comando:
    source ~/.bashrcou. ~/.bashrc

Agora você pode avançar na história com o atalho: Ctrl + f

Trabalhando no Ubuntu 18.04 LTS

Franklin TN
fonte
0

Note que eu tinha usado

stty stop ^J
stty -ixoff

em .bashrc para ativar a pesquisa direta e desativar a irritante mensagem "A saída foi suspensa pressionando Ctrl + S. Pressione Ctrl + Q para retomar" a mensagem no Konsole quando ctrl + s foi pressionado, mas ambos os comandos interromperam individualmente a integração do Konsole no Dolphin ( o atalho "F4") da maneira que eu tinha que pressionar ctrl + c duas vezes para que ele funcionasse, e os comandos automáticos "cd" onde não eram injetados durante a navegação gráfica.

Então agora eu prefiro:

stty stop undef
stty -ixon

Tem o mesmo efeito, tudo parece funcionar como esperado;)

NoGa
fonte