Conclusão automática da Bash com espaços adicionados - por que e como corrigir?

29

Eu uso a conclusão de tabulação mais do que digitando letras. Eu costumava digitar rm ~/De<TAB> e seria concluído em rm ~/Desktop/ para que eu pudesse continuar no próximo nível.

Recentemente, esse comportamento mudou. A conclusão agora gera rm ~/Desktop<SPACE> , o que significa que devo voltar e digitar a barra se quiser continuar. Isso me faz chorar.

As alterações parecem estar localizadas na função _longopt() in /etc/bash_completion , mas isso é o máximo que posso seguir. Esta mudança é intencional e, em caso afirmativo, para que serve? Posso ter o comportamento antigo de volta, de preferência por uma opção de configuração, em vez de simplesmente copiar o código antigo de algum outro sistema?

Editar: a função para referência.

_longopt()
{
    local cur prev split=false
    _get_comp_words_by_ref -n = cur prev

    _split_longopt && split=true

    case "$prev" in
        --*[Dd][Ii][Rr]*)
            _filedir -d
            return 0
            ;;
        --*[Ff][Ii][Ll][Ee]*|--*[Pp][Aa][Tt][Hh]*)
            _filedir
            return 0
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W "$(  --help 2>&1 | \
            sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}\).*//p' | sort -u )" \
            -- "$cur" ) )
    elif [[ "" == @(mk|rm)dir ]]; then
        _filedir -d
    else
        _filedir
    fi
}
    
por MPi 10.05.2011 / 09:54

3 respostas

22

Este é um bug conhecido. Veja esta pergunta do LP e esses bugs 1 2 .

Este comentário parece ser a solução. Se você não puder esperar que uma correção goteje nos canais normais, edite /etc/bash_completion line 1587, altere default para filenames (faça um backup primeiro).

    
por Christoph 10.05.2011 / 13:17
9

Eu tive e resolvi o mesmo problema depois de instalar o Adobe Reader no Ubuntu 12.04.

Comentei o bloco _filedir em /etc/bash_completion.d/acroread.sh e ele funcionou normalmente de novo.

    
por hiteshradia 02.03.2013 / 18:08
2

Eu tive o mesmo problema e corrigi-lo removendo o diretório /etc/bash_completion.d/, depois reinstale o bash_completion. Eu acho que um arquivo antigo estava neste diretório ... Espero que isso também resolva o seu problema.

    
por PatrickM 12.05.2011 / 14:57

Tags