Configure a seta para cima para navegar pelos comandos com os mesmos caracteres iniciais, em vez de todos os comandos anteriores


15

Na bashlinha de comando, me dá o comando anterior. Nas linhas de comando numpyou matlab, quando digito alguns caracteres, fornece o comando digitado anteriormente, começando com esses caracteres . Como posso ativar exatamente esse comportamento bash?

Estou ciente das maneiras mais avançadas de pesquisar no histórico da linha de comando, mas às vezes uma maneira simples é mais conveniente.

Respostas:


18

Os comandos readline que você está procurando são os seguintes history-search-*:

history-search-forward
Pesquise para a frente no histórico a sequência de caracteres entre o início da linha atual e a posição atual do cursor (o ponto). Esta é uma pesquisa não incremental.
history-search-backward
Pesquise para trás no histórico a sequência de caracteres entre o início da linha atual e o ponto. Esta é uma pesquisa não incremental.

Vinculá-los no seu .inputrc, assim:

"\e[A": history-search-backward            # arrow up
"\e[B": history-search-forward             # arrow down

permitirá que você insira os primeiros caracteres de um comando e, em seguida, use as teclas Upe Downpara passar apenas pelos comandos no seu .bash_historyque começam com essa sequência.

Por exemplo, inserir vie o Uplevaria ao primeiro comando anterior começando com vi, como vim somefile. A inserção Uplevará você para a próxima instância anterior e assim por diante.

Você pode ler mais sobre todas as ligações de readline aqui: http://linux.about.com/library/cmd/blcmdl3_readline.htm


10

Adicione o seguinte ao seu .inputrc em ~ /, para fazer o que você sugeriu:

"\e[B": history-search-forward
"\e[A": history-search-backward

Talvez você também queira adicionar o seguinte ao seu .bash_profile:

export INPUTRC=~/.inputrc

Você pode explicar por que fazer essa "exportação"?
texnic

2

Anexe um "!" para o comando que você está procurando. Se você deseja substituir a funcionalidade das setas para cima e para baixo, a modificação do arquivo inputrc (como as outras respostas sugerem) é o caminho a seguir.

Se "comando" é o comando que você está procurando, digite o seguinte:

!comm

Você deve obter "comando" como saída.

Da mesma forma, se você deseja encontrar um comando que inclua (mas pode não começar) parte do comando, pressione ctrl + r e digite parte do comando.

Você também pode digitar "tab" para completar automaticamente o texto digitado (isso inclui arquivos também). Isso é útil se você estiver procurando por um comando que não esteja no seu histórico (ou se não tiver um arquivo de histórico)

Você pode ler mais sobre "dominar" o arquivo de histórico aqui: http://www.thegeekstuff.com/2008/08/15-examples-to-master-linux-command-line-history/

Esta é uma possível duplicata de /programming/1030182/how-do-i-change-bash-history-completion-to-complete-whats-already-on-the-line


As outras respostas respondem mais corretamente à minha pergunta, mas obrigado pelo ponteiro para SO (consulte também meta.stackexchange.com/q/4708/172266 ).
amigos estão dizendo sobre gabriel
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.