Bash自动完成增加空间 - 为什么,以及如何修复?

Modified on: Sat, 09 Jun 2018 06:11:23 +0800

我使用标签完成而非输入字母。我曾经输入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 }

最佳答案

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

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

作者:,Christoph

相关问答

添加新评论