Conclusão de guia sem distinção entre maiúsculas e minúsculas no Bash

141

Existe alguma maneira de fazer com que a guia Bash complete maiúsculas e minúsculas?

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.

Estou usando o Mac OS X 10.6

Jeffrey Aylesworth
fonte

Respostas:

170

Atualize o texto /etc/inputrcpara incluir

definir conclusão-ignorar-caso em

Em seguida, use ^X ^Rpara recarregar a configuração.

John T
fonte
30
"também" - /etc/inputrcou ~/.inputrcou um arquivo designado por INPUTRCé o único lugar para onde ele pode ir. Digitar isso em um prompt do Bash não funcionará.
Dennis Williamson
Ops! você está certo :)
John T
10
^X ^Rpara recarregarinputrc
grawity
14
@DennisWilliamson: você pode fazer a bind "set completion-ignore-case on"partir da linha de comando; para, creio eu, a sessão terminal só
Pontes de argila
11
Então é isso que o msysgit tem, mas o MSYS2 não tem! Aqui eu estava tentando encontrá-lo em eg / etc / profile ...
Samb
110

Reestruturado com o benefício de visão retrospectiva para contrastar as vantagens e desvantagens de usar [.]inputrcvs .bash_profile.
Ponta do chapéu para sublinhar_d por sua ajuda.

Nota: A edição da linha de comandos no Bash é fornecida pela biblioteca Readline; personalizá-lo não é trivial, mas vale a pena aprender; seus recursos incluem a capacidade de definir atalhos de teclado personalizados para inserir trechos de texto predefinidos - consulte Edição de linha de comando no Manual de referência do Bash

Para tornar o preenchimento de tabulação persistentemente sem distinção entre maiúsculas e minúsculas no Bash:


Opção A: Se você já possui:

  • um /etc/inputrcarquivo (aplica-se a todo o sistema, a modificação requer sudo)
  • e / ou um ~/.inputrcarquivo (específico do usuário)

    e / ou

você planeja personalizar extensivamente a biblioteca readline e / ou deseja tornar as personalizações eficazes para scripts também quando eles chamam read -e:

Adicionar linha

set completion-ignore-case on

para qualquer arquivo, dependendo se você deseja que a configuração seja efetiva para todos os usuários ou para o usuário atual (crie o arquivo, se necessário).

Um comando relacionado que facilita a conclusão de nomes de arquivos e diretórios é:

set show-all-if-ambiguous on

Isso torna desnecessário pressionar Tab duas vezes quando houver mais de uma correspondência.


Opção B: Como alternativa, você pode adicionar comandos Readline ao seu ~/.bash_profilearquivo específico do usuário no OS X (ou ~/.bashrcno Linux), passando-os como um único argumento para o bindbuiltin :

bind "set completion-ignore-case on"
bind "set show-all-if-ambiguous on"

Observe que os bindcomandos em ~/.bash_profile/ ~/.bashrctêm precedência sobre comandos equivalentes em /etc/inputrcou ~/.inputrc.

Conforme implícito acima, a configuração do Readline definida dessa maneira não terá efeito nos scripts que chamam read -epara ativar o suporte do Readline para a leitura da entrada do usuário.

mklement0
fonte
10
mostrar tudo se ambíguo é tão legal! Eu sempre me perguntava por que eles me fizeram separar duas vezes para executar essa ação. milhares de pressionamentos de tecla salvos no meu futuro! obrigado!
user34112
4
Incrível, funciona até para cdcomandos. O que resolve esta questão e também me salvará milhares de pressionamentos de tecla. :)
hoosierEE
11
Ótimo ponto re show-all-if-ambiguous. No entanto, como você diz "como alternativa", há realmente algum benefício em fazer isso via bind, quando os inputrcarquivos parecem tornar isso desnecessário?
underscore_d
11
@underscore_d: Boa pergunta; por favor, veja minha resposta atualizada.
mklement0
11
Legal, obrigado! No Debian 8.2 eu não tinha nenhum inputrc, mas felizmente criei ~/.inputrce os adicionei, além de outras diretivas realmente úteis. Acho que estamos assumindo que todos os leitores sabem que /etc/inputrc afeta outros usuários (a menos que os últimos substituam as configurações afetadas)? Enquanto mencionamos advertências;)
underscore_d
1

Para evitar alterar a configuração de todos os usuários e evitar permissões de root, use o seguinte:

if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi
echo 'set completion-ignore-case on' >> ~/.inputrc

Em seguida, faça login novamente ou recarregue ~ / .inputrc

Ankur A Sharma
fonte