问题描述
我使用标签完成比输入字母更多。我曾经输入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。我想这个目录中有一个旧文件…希望它也能解决你的问题。