Bash автозаполнение с добавленными пробелами - почему и как исправить?

Я использую вкладку больше, чем печатать буквы. Я использовал для ввода rm ~/De<TAB>, и он будет завершен до rm ~/Desktop/, чтобы я мог продолжить на следующем уровне.

В последнее время это поведение изменилось. Завершение теперь дает rm ~/Desktop<SPACE>, что означает, что я должен вернуться и набрать косую черту, если я хочу продолжить. Это заставляет меня плакать.

Изменения, по-видимому, находятся в функции _longopt() в /etc/bash_completion, однако это насколько я могу следовать. Является ли это изменение намеренным, и если да, то для чего это полезно? Могу ли я вернуть прежнее поведение, желательно с помощью параметра конфигурации вместо того, чтобы просто копировать старый код из какой-либо другой системы?

Изменить: Функция для ссылки.

_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 "$( $1 --help 2>&1 | \
            sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}\).*/\1/p' | sort -u )" \
            -- "$cur" ) )
    elif [[ "$1" == @(mk|rm)dir ]]; then
        _filedir -d
    else
        _filedir
    fi
}
1
задан 2 March 2013 в 23:11

2 ответа

У меня была и решена такая же проблема после установки Adobe Reader на Ubuntu 12.04.

Я прокомментировал блок _filedir в /etc/bash_completion.d/acroread.sh, и он снова работал нормально.

9
ответ дан 25 May 2018 в 21:12
  • 1
    На сегодняшний день это то, что сработало и для меня. – John Moeller 26 March 2013 в 11:52
  • 2
    То же самое и здесь: acroread вызвал его и закомментировал блок _filedir (справа сверху), исправил его. Вы должны выйти или запустить «exec bash» во всех своих оболочках, чтобы увидеть эффект, см. этот вопрос . – dirkjot 15 June 2013 в 01:37

У меня была такая же проблема, и я исправил ее, удалив каталог /etc/bash_completion.d/, а затем переустановил bash_completion. Я думаю, старый файл был в этом каталоге ... Надеюсь, он также решит вашу проблему.

2
ответ дан 25 May 2018 в 21:12
  • 1
    как этот парень: timlabath.com/words/2011/05/10/… – type 18 May 2011 в 19:37
  • 2
    Это - действительно - исправлено. Однако этот метод слишком радикален, поскольку он отбрасывает много доработок. После удаления пакета bash-completion один из оставшихся файлов /etc/bash_completion.d/ должен быть виновником. Это было acroread.sh в моем случае - оно переопределяет _filedir. – MPi 6 June 2011 в 17:58

Другие вопросы по тегам:

Похожие вопросы: