J'utilise l'achèvement des tabulations plus que la saisie de lettres. J'avais l'habitude de taper rm ~/De<TAB>
et ce serait terminé pour rm ~/Desktop/
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 changements semblent se situer dans la fonction _longopt()
en /etc/bash_completion
, mais c'est aussi loin que je puisse suivre. Ce changement est-il intentionnel, et si oui, à quoi sert-il? Puis-je récupérer l'ancien comportement, de préférence par une option de configuration au lieu de simplement copier l'ancien code à partir d'un autre système?
Edit: 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 "$( $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
}
_longopt()
fonction?
readline
paramètres (avez-vous un ~/inputrc
fichier?) Et du fait que l'élément est un véritable répertoire ou un lien symbolique vers un répertoire.
.inputrc
sur ce système. (C'étaient les jours, fixant le retour arrière et les touches de curseur…) Et ça arrive pour tous les éléments, répertoire ou fichier, lien symbolique ou pas.
rmdir
, pas pourmkdir
outouch
.