Forçar a conclusão normal da guia Bash se a conclusão inteligente falhar

Forçar a conclusão normal da guia Bash se a conclusão inteligente falhar

Desde que o preenchimento de guias se tornou um recurso padrão em shells, tenho sido um usuário muito feliz dele. Eu até gosto do preenchimento inteligente do Bash (onde ele apenas procura arquivos PDF, se eu digitar evince foo<TAB>) - desde que ele adivinhe corretamente.

Arruina um dia feliz quando Bash usa sua conclusão inteligente para recusar a conclusão.

Hoje eu queria:

tar xvf centos5.8_x86_1.ova

Então eu entrei:

tar xvf cent<TAB>

e Bash se recusa a completar o caminho porque .ova-files não é o que você normalmente usa com tar.

Eu sei que posso desinstalar o pacote bash-completion para remover a conclusão inteligente. Mas posso pegar meu bolo e comê-lo também?

Posso pedir ao bash para usar o preenchimento inteligente primeiro e, se isso falhar, usar o preenchimento não inteligente?

Responder1

O seguinte deve ativar a conclusão normal do bash após todas as conclusões 'inteligentes' terem falhado para os programas tar, vim e emacs:

compopt -o bashdefault tar vim emacs

veja também opágina relevanteno manual do bash online.

Advertência: você obtém o comportamento normal para o tipo de conclusão (comandos/nomes de arquivos/nomes de usuários etc.) definido pela conclusão inteligente para o comando em questão, por exemplo, a conclusão de servicenão completará nomes de arquivos mesmo se você chamar complete -o bashdefault service.

Neste e em outros casos em que o preenchimento automático inteligente falha, você sempre pode pressionar Alt-/(ou M-/na notação do manual do bash) para concluirnomes de arquivosquase da mesma forma que o TAB funciona se o preenchimento inteligente estiver desabilitado (quase da mesma forma no sentido de que M-/não completa padrões como *.txt). Veraquipara sequências de teclas para outros tipos de conclusões, como comandos e nomes de usuário.

Responder2

Olá Ole :-),

Ter seu bolo e comê-lo também:

<tab>lhe dará o melhor palpite do bash na conclusão. Como você sabe, às vezes isso está errado.

No entanto, M-/( ALT+ SHIFT+ 7(e isso é esquerdo ALT, não direito AltGr) em nossos teclados dinamarqueses) forçará a conclusão como um arquivo para quando a conclusão do bash não for perfeita. Então eu uso M-/quando sei que quero forçar a conclusão como um arquivo.

Para mim, esse é o melhor dos dois mundos.

Responder3

A conclusão do bash é uma extensão da conclusão padrão do bash e é em si um programa bash. Então, se você quiser mudar a forma como o programa funciona, basta alterá-lo. Este é um software livre, você é livre para fazê-lo. Para o caso específico do tarcomando, o arquivo é /usr/share/bash-completion/completions/tar. Para tarcompletar automaticamente um arquivo com extensão ova, basta adicioná-lo à linha

local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

então diz

local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

Observe que este é o caminho e o código existente para o Debian Wheezy (versão estável atual). Uma distribuição ou versão diferente pode ter um código diferente, mas a ideia é a mesma. Abra o código e ajuste-o para fazer o que você deseja.

Editar: acabei de perceber que a pergunta era toda vez que não encontra uma correspondência e não apenas o caso específico de adicionar ovaa tar. Talvez ainda possa ser útil para alguém saber onde procurar a fonte.

informação relacionada