带有添加空格的 Bash 自动完成 - 为什么以及如何修复?

MPi*_*MPi 30 bash

我使用 Tab 补全比输入字母更多。我曾经打字rm ~/De<TAB>,它会完成,rm ~/Desktop/以便我可以继续下一个级别。

最近,这种行为改变了。完成现在 yield 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
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*oph 22

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

这条评论似乎是解决办法。如果您迫不及待地等待修复正常通道,请编辑/etc/bash_completion第 1587 行,更改defaultfilenames(先进行备份)。

  • 总结:这是一个bug,您可以通过编辑`/etc/bash_completion`第1587行,将`default`更改为`filenames`,在本地修复它,直到补丁到来。 (3认同)

小智 9

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

我注释掉了这个_filedir/etc/bash_completion.d/acroread.sh,它又正常工作了。