Conclusão do Bash: sempre mostra todos os arquivos

Conclusão do Bash: sempre mostra todos os arquivos

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_profileem 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 ~/.inputrcarquivo:

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.

informação relacionada