Normalmente, quando eu passo um nome de arquivo que é o único arquivo no diretório atual com preenchimento automático por Tab para o comando vir antes dele, pressione vários Tab (erroneamente), o mesmo nome de arquivo completo várias vezes e devo excluir ou cancelar e começar novamente .
Existe alguma maneira de desabilitar esse comportamento (sem criar outro arquivo nem arquivo oculto)?
ls <Tab>filename <Tab>filename <Tab>filename
Uma solução é usar a
nospace
opção para ocomplete
arquivo .Primeiro, você precisa saber como a conclusão é definida para
ls
Então você o modifica adicionando
-o nospace
Assim, mesmo se você acertar Tab ↹várias vezes, não haverá correspondência e nenhum argumento será adicionado à linha de comando.
Efeito colateral : você precisa anexar manualmente um espaço no final da linha se quiser adicionar outro argumento ao arquivo
ls
.Para evitar esse efeito colateral, você pode modificar a
_longopt
função de uma maneira que impeça que ela corresponda ao mesmo argumento duas vezes (pode não ser simples).Como aplicar isso a outros comandos e torná-lo permanente
Anexar um espaço à direita após uma correspondência é o comportamento padrão. Não sei se há outra maneira de usar
-o nospace
ao especificar regras de conclusão comcomplete
.Além disso, lembre-se de que as regras de conclusão são especificadas em algum lugar, mesmo para comandos internos (no meu laptop nesta pasta:
/usr/share/bash-completion
). Se você observar o arquivo/usr/share/bash-completion/bash-completion
, encontrará onde as conclusões são definidas parals
:Você vê que as mesmas regras se aplicam a vários comandos diferentes (como
cp
,mv
,rm
...), portanto, se você modificar isso adicionando-o nospace
, a alteração afetaráls
e todos os outros comandos.Se você não estiver confortável em modificar as configurações globais (você precisará de privilégios de root), você pode gravá-las
~/.bash_completion
(criar este arquivo, se não estiver presente), assimSe você deseja modificar as conclusões de outros comandos não listados aqui, basta procurá-los no
/usr/share/bash-completion/bash-completion
arquivo ou na/usr/share/bash-completion/completions
pasta.