Instalei recentemente bash-completion
(via homebrew). Agora omite arquivos na lista de conclusão que euquererpara mostrar e omite completamente as opções válidas, como esta:
[alex@mbp foo]$ ls
bar.csv foo.csv
[alex@mbp foo]$ sh ../dosomething.sh fo<TAB>
((nothing shown))
Como um usuário pesado de linha de comando, isso é extremamente irritante. Alguém pode me dizer como desativar esse comportamento? Não consegui encontrar nada de útil na documentação ou no Google.
A conclusão do bashPerguntas frequentesdiz:
P. O código de conclusão bash inibe a conclusão de alguns comandos em arquivos com extensões legítimas em meu ambiente. Preciso desabilitar a conclusão desse comando para concluir os arquivos necessários?
R. Não. Use M-/ para (nas palavras da página de manual do bash) tentar completar o nome do arquivo no texto à esquerda do cursor. Isso contornará quaisquer restrições de tipo de arquivo implementadas pelo código de conclusão do bash.
Mas esta não é uma solução aceitável para mim - quero que "TAB" mostre todos os arquivos/diretórios, independentemente de a extensão ser válida para o arquivo ou não (é assim que funcionou bem para mim nos últimos 20 anos).
Como posso conseguir isso?
Eu preferiria uma configuração .bashrc
/ .bash_profile
em vez de excluir scripts de conclusão global. Aqui está como eu incluo atualmente o bash-completion (é apenas uma instalação padrão do homebrew):
[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion
Atualização: eu vi issoConclusão da guia do nome do arquivo Bashmas não é exatamente o que eu quero, pois requer muito trabalho manual para todas as extensões de arquivo possíveis no planeta/meu sistema.
Responder1
A resposta aceita ainda não resolve o problema, pois interrompe a conclusão do comando (ou seja, "pyt+ TAB
" para obter python, etc.), pois não está incluído no nome completo do arquivo.
complete -o default python
Isso não resolverá o problema de todos os comandos (apenas "python" neste exemplo), mas corrigirá o problema de comandos específicos que estão se comportando mal. Infelizmente não parece haver uma maneira limpa de definir "padrão" (ou seja, o padrão do Readline) em tudo; isso deve ser feito para cada comando que você possa usar. Ou use a solução alternativa .inputrc acima.
Responder2
Também fiquei irritado com isso, então li o manual do bash. Acredito que o comportamento desejado pode ser alcançado com este ~/.inputrc
arquivo:
TAB: complete-filename
M-/: complete
A conclusão regular, com o conjunto completo de regras, é mapeada Meta-/
e a conclusão somente de nome de arquivo é mapeada para TAB
.