我使用 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
答案2
在 Ubuntu 12.04 上安装 Adobe Reader 后,我遇到了同样的问题并解决了。
我注释掉了该_filedir
块/etc/bash_completion.d/acroread.sh
并且它又可以正常工作。
答案3
我遇到了同样的问题,我通过删除 /etc/bash_completion.d/ 目录,然后重新安装 bash_completion 解决了这个问题。我猜这个目录中有一个旧文件……希望它也能解决你的问题。