当前位置: 首页>>技术问答>>正文


Bash auto-completion增加了空间 – 为什么以及如何修复?

,

问题描述

我使用标签完成比输入字母更多。我曾经输入rm ~/De<TAB>,它将完成rm ~/Desktop/,这样我就可以继续下一个级别了。

最近,这种行为改变了。完成现在产生rm ~/Desktop<SPACE>,这意味着如果我想继续,我必须退格并键入斜杠。这让我哭了。

这些变化似乎位于/etc/bash_completion中的_longopt()函数中,但这是我可以遵循的。这种变化是否有意,如果是,那有什么用?我可以恢复旧的行为,最好是通过配置选项而不是仅仅从其他系统复制旧代码吗?

编辑:该功能供参考。

_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
}

最佳解决办法

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

This comment似乎是修复。如果您不能等待修复以正常通道,请编辑/etc/bash_completion行1587,将default更改为filenames(先备份)。

次佳解决办法

在Ubuntu 12.04上安装Adobe Reader后,我已经解决了同样的问题。

我在/etc/bash_completion.d/acroread.sh中注释掉了_filedir块,它再次正常工作。

第三种解决办法

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6362.html,未经允许,请勿转载。