J'utilise l'achèvement de tabulation plus que la saisie de lettres. J'avais l'habitude de taper rm ~/De<TAB>
et il serait complété à rm ~/Desktop/
pour que je puisse continuer au niveau suivant.
Récemment, ce comportement a changé. L'achèvement donne maintenant rm ~/Desktop<SPACE>
, ce qui signifie que je dois revenir en arrière et taper la barre oblique si je veux continuer. Cela me fait pleurer.
Les modifications semblent se situer dans la fonction _longopt()
in /etc/bash_completion
, mais c'est tout ce que je peux suivre. Est-ce que ce changement est intentionnel et si oui, à quoi cela sert-il? Puis-je retrouver l'ancien comportement, de préférence par une option de configuration au lieu de simplement copier l'ancien code d'un autre système?
Modifier: la fonction de référence.
_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 "$( --help 2>&1 | \
sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}\).*//p' | sort -u )" \
-- "$cur" ) )
elif [[ "" == @(mk|rm)dir ]]; then
_filedir -d
else
_filedir
fi
}