我使用制表符完成比输入字母更多。我曾经打过字rm ~/De<TAB>
,然后输入完成,rm ~/Desktop/
这样我就可以继续下一个级别了。
最近,这种行为发生了变化。现在rm ~/Desktop<SPACE>
,完成将产生,这意味着如果要继续,必须退格并键入斜杠。这让我哭了。
所做的更改似乎位于中的函数_longopt()
中/etc/bash_completion
,但是据我所知。此更改是否是有意的?如果是,那么这样做有什么好处?我能否恢复旧的行为,最好是通过config选项,而不是仅仅从其他系统复制旧的代码?
编辑:该功能供参考。
_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
}
您能张贴您的
—
2011年
_longopt()
职能的身体吗?
@MPi:请注意,完成可能取决于命令(命令行的第一个单词)。它还取决于
—
enzotib
readline
设置(是否有~/inputrc
文件?)以及该项目是真实目录还是目录的符号链接。
当然,完成度取决于该行的第一个单词。这就是为什么我有时使用幻想命令来欺骗完成,并且仅在发送前将其更改为真实命令的原因。我已经没有
—
MPi
.inputrc
这个系统了。(那是过去的日子,正在固定退格键和光标键……)并且它发生在所有元素,目录或文件,是否有符号链接上。
很好的问题,我观察到了完全相同的行为,这使我很烦。不过,不知道原因。
—
Christoph
rmdir
,mkdir
或等命令有用touch
。