Bash 自动完成时添加空格 – 为什么以及如何修复?

Bash 自动完成时添加空格 – 为什么以及如何修复?

我使用 Tab 补全的次数比输入字母要多。我以前输入完字母后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

这是一个已知错误。请参阅LP 问题和这些错误1 2

这条评论似乎是修复方法。如果您等不及修复方法通过正常渠道发布,请编辑/etc/bash_completion第 1587 行,将其更改defaultfilenames(先进行备份)。

答案2

在 Ubuntu 12.04 上安装 Adob​​e Reader 后,我遇到了同样的问题并解决了。

我注释掉了该_filedir/etc/bash_completion.d/acroread.sh并且它又可以正常工作。

答案3

我遇到了同样的问题,我通过删除 /etc/bash_completion.d/ 目录,然后重新安装 bash_completion 解决了这个问题。我猜这个目录中有一个旧文件……希望它也能解决你的问题。

相关内容