Posso fazer o preenchimento automático de tabulação sem distinção entre maiúsculas e minúsculas no Bash?

144

O Terminal do Ubuntu usa o preenchimento automático que diferencia maiúsculas de minúsculas, como suponho que seria esperado para o Linux.

Mas acho que muitas vezes seria mais conveniente usar um que não diferencia maiúsculas de minúsculas, para evitar que você seja preciso ao iniciar um nome e provavelmente valeria os falsos positivos extras. É possível mudar esse comportamento?

mwfearnley
fonte
Muito boa pergunta. Como ferramenta de usabilidade, o preenchimento de guias não deve ser tão rigoroso quanto o sistema de computador em geral quando se trata de nomear coisas.
masterxilo 23/01

Respostas:

170

Para fazer bashdistinção entre maiúsculas e minúsculas para o usuário atual:

Execute o seguinte script de shell em um terminal:

# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi

# Add shell-option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc

Inicie um novo shell (reabra o terminal).

Para fazer as alterações em todo o sistema:

# add option to /etc/inputrc to enable case-insensitive tab completion for all users
echo 'set completion-ignore-case On' >> /etc/inputrc
# you may have to use this instead if you are not a superuser:
echo 'set completion-ignore-case On' | sudo tee -a /etc/inputrc

Para detalhes, consulte man bash. Sim, é uma página longa, mas o bash é um programa um pouco complexo e, se você quiser, basta pesquisar nessa página "sem distinção entre maiúsculas e minúsculas" para ir para a seção relevante. As pessoas geralmente aprendem bash uma opção de cada vez ou um script bash de cada vez e leva muito tempo para dominar todas as nuances. Seu interesse pode variar.

Pantera
fonte
Obrigado. Agradeço a solução específica para o usuário / não compatível com o administrador. A linha de eco parece ter funcionado, mas agora parece que perdi a capacidade de usar Ctrl-Esquerda / Direita para mover o cursor. Além disso, seria >>mais seguro do que >?
Mwfearnley
Em geral, será mais seguro, meu erro, eu estava assumindo que você não tinha um ~ / .inputrc. Também defini noclobber =) Com certeza por que suas teclas de seta não estão funcionando, não consigo replicar isso. Você pode remover ~ / .inputrc e iniciar um novo shell.
Panther
Sim, funciona novamente se eu removê-lo. De acordo com linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.html, o novo inputrc pode estar substituindo o global?
Mkfearnley
2
Puta merda, copiei isso no / etc / inputrc e não consigo mais digitar "i" e, quando digito "e", apenas gera "ssssssssss [..]" no console. É melhor usar a solução do @ emtin4
Luca Steeb 31/03
2
@LucaSteeb Eu bati nisso também, mas percebi que todo esse bloco não deveria ser colocado no seu .inputrc, mas digitado uma vez. Somente $include /etc/inputrce set completion-ignore-case ondeve estar no seu arquivo ~ ..inputrc.
Chris
49

Abra um terminal e digite o comando abaixo:

echo set completion-ignore-case on | sudo tee -a /etc/inputrc

Digite a senha. Reinicie o terminal.

Se, em algum caso, você desejar remover a distinção entre maiúsculas e minúsculas, basta editar o arquivo / etc / inputrc removendo a set completion-ignore-caselinha.

Isso é tudo.

emtin4
fonte
OK, eu esclareci isso para você. Demora um pouco para aprender sobre o bash, mas continue explorando, lendo e perguntando. linuxcommand.org é um começo popular;)
Panther
3
No caso de haver mais de um usuário, isso muda-lo para todos, que pode ou não ser o comportamento desejado
Walter Tross
2
de longe, a resposta mais simples e simplista aqui
workabyte
resposta simples e clara
Developerium
12

Eu sei que essa pergunta é muito antiga, mas, a menos que esteja faltando algo, acho que tenho uma solução super simples se você estiver usando o bash.

echo "bind 'set completion-ignore-case on'" >> ~/.bashrc

Ou simplesmente adicione a linha usando seu editor de texto favorito. Reinicie sua sessão do bash e aproveite.

init3
fonte
2
Bem, você está perdendo algo: ~/.inputrcé lido pela readline, que é o que o bash usa para fornecer essa conclusão. O Readline também é usado por outros programas, portanto, para definir isso geralmente, ~/.inputrcconforme sugerido, a resposta aceita seria melhor.
muru 31/01
Obrigado pela sua sugestão, ele me ensina um pouco mais, mas devo dizer que não parece mais simples do que o que aceitei, que usa apenas uma linha adicional para garantir que o novo arquivo não anule o antigo.
Mwfearnley
perfeito. bem, a única coisa a lembrar é que bind 'set completion-ignore-case on'deve entrar em uma nova linha de.bashrc
Vishrant
3

Você pode fazer isso definindo uma variável de configuração para a linha de leitura GNU, que é o que manipula a entrada em um shell interativo.

A variável necessária é completion-ignore-casee pode ser definida diretamente na sua sessão do bash com:

bind "set completion-ignore-case on"

Ele pode ser ativado para todas as sessões futuras do bash, colocando-o no ~/.inputrcarquivo do usuário ou no sistema /etc/inputrcpara ativá-lo para todos os usuários. Este é o arquivo de inicialização do readline.

Mas observe que, se você criar ~/.inputrc, isso substituirá a cópia do sistema . (Para mim, isso me levou a perder alguns mapeamentos de teclas, como Ctrl-Left/ Right. Você pode ver quais examinando o /etc/inputrcarquivo.)
A maneira de corrigir esse problema é colocar a linha $include /etc/inputrcno topo ~/.inputrc, por exemplo:

$include /etc/inputrc

set completion-ignore-case on

Para aplicar as alterações, reinicie o bash ou recarregue o inputrc , por exemplo Ctrl+x, com Ctrl+r,.

Mais informações sobre o readline e o inputrc podem ser encontradas em man bashe man 3 readline.

mwfearnley
fonte