CTRL + R no shell - se eu passar pelo comando que quero, como faço para voltar a ele?

3

Eu estou acendendo febrilmente a tecla CTRL + R para encontrar algum comando que usei há algum tempo, quando de repente eu a consegui. Por reflexo, continuo pressionando CTRL + R , passando-o para algo mais atrás no histórico do shell. Como eu volto para o comando que acabei de passar, sem ter que começar toda a pesquisa?

    
por Andrew 20.04.2016 / 20:44

1 resposta

6

A funcionalidade Ctrl + R para pesquisar para trás através do histórico do shell é fornecida pelo Readline usada pelo Bash. A função correspondente para procurar encaminhar através do histórico é, por padrão, ligada a Ctrl + S .

No entanto, o problema é que o driver de terminal já usa essa combinação de teclas para controle de fluxo : pressionando Ctrl + S para ou pausa o texto sendo impresso no terminal e Ctrl + Q retoma o fluxo de caracteres enviados para o dispositivo terminal.

Estas configurações são ativadas por padrão para a maioria dos dispositivos de terminal em sistemas GNU / Linux, com o resultado de que o Bash / Readline nunca vê a sequência de teclas Ctrl + S capturado pelo driver do terminal e nunca passado para o shell.

Esse comportamento (também chamado de controle de fluxo XON / XOFF ) pode ser desativado executando:

stty -ixon

Agora, a combinação de teclas Ctrl + S será passada para Bash / Readline.

Combinação de teclas alternativas

Se você preferir que o Readline use uma combinação de teclas diferente para pesquisar encaminhamento , use o comando bind para ativar uma vinculação de chave diferente, por exemplo, Ctrl + F (para encaminhamento). NB: todas as citações são necessárias.

bind '"\C-f": forward-search-history'

Modifique a configuração para manter essas alterações

O controle de fluxo de terminal não é particularmente útil em dispositivos modernos, por isso defendo a execução do seguinte comando sempre que um novo terminal ou dispositivo de pseudo-terminal for iniciado:

stty -ixon

.bashrc provavelmente seria um bom arquivo de inicialização para executar este comando, pois o arquivo é originado para shells interativos do Bash. Se .bashrc não for originado por .profile ou .bash_profle , o comando stty acima deverá ser adicionado a qualquer arquivo de inicialização usado para shells de login.

O arquivo de configuração Readline é .inputrc se você preferir usar uma ligação de chave diferente como Ctrl + F para procurar encaminhar história:

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

Links relacionados

por 21.04.2016 / 00:28