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

10

Como a conclusão da tabulação se tornou um recurso padrão nos shells, eu tenho sido um usuário muito feliz. Eu até gosto da conclusão inteligente do Bash (onde ele só procura por arquivos PDF, se eu digitar evince foo < TAB >) - desde que ele adivinhe corretamente.

Ele estraga um dia feliz quando Bash usa sua conclusão inteligente para recusar o preenchimento.

Hoje eu queria:

tar xvf centos5.8_x86_1.ova

Então eu entrei:

tar xvf cent<TAB>

e o Bash se recusa a completar o caminho porque arquivos .ova não são o que você costuma usar com o tar.

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

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

    
por Ole Tange 30.03.2014 / 15:53

2 respostas

8

O seguinte deve ativar a conclusão normal do bash depois de tudo "inteligente" Conclusões falharam para os programas tar, vim e emacs:

compopt -o bashdefault tar vim emacs

veja também a página relevante no manual da campanha on-line.

Advertência: você recebe o comportamento normal para o tipo de conclusão (comandos / nomes de arquivos / nomes de usuário, etc.) definido pelo preenchimento inteligente para o comando em questão, por exemplo, a conclusão para service não completará nomes de arquivos mesmo se você chamar complete -o bashdefault service .

Neste e em outros casos em que o autocompletar inteligente falha, você sempre pode pressionar Alt-/ (ou M-/ na notação do manual bash) para completar nomes de arquivos quase da mesma maneira que o TAB funciona se inteligente a conclusão está desativada (quase da mesma maneira no sentido de que M-/ não conclui padrões como *.txt ). Consulte aqui para sequências de teclas para outros tipos de preenchimento, como comando e nomes de usuário.

    
por 07.05.2014 / 15:16
1

completaçã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 o modo de agir do programa, basta mudá-lo. Este é um software livre, você é livre para fazer isso. Para o caso específico do comando tar , o arquivo é /usr/share/bash-completion/completions/tar . Para tar completar 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)))'

Note que este é o caminho e o código existente para o Debian Wheezy (versão estável atual). Uma distro 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.

Edit: Acabei de notar que a pergunta era sobre cada vez que ele não encontrou uma correspondência e não apenas o caso específico de adicionar ova a tar . Talvez ainda possa ser útil para alguém, saber onde eles podem procurar a fonte.

    
por 31.03.2014 / 04:30