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
}
rmdir
, pas pourmkdir
outouch
._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.Réponses:
C'est un bug connu. Voir cette question LP et ces bugs 1 2 .
Ce commentaire semble être la solution. Si vous ne pouvez pas attendre qu'un correctif pénètre dans les canaux normaux, modifiez la
/etc/bash_completion
ligne 1587, changezdefault
enfilenames
(effectuez d'abord une sauvegarde).la source
/etc/bash_completion
ligne 1587, changezdefault
pourfilenames
.J'ai eu et résolu le même problème après l'installation d'Adobe Reader sur Ubuntu 12.04.
J'ai commenté le
_filedir
bloc/etc/bash_completion.d/acroread.sh
et cela a de nouveau fonctionné normalement.la source
_filedir
bloc (juste en haut) l'a corrigé. Vous devez vous déconnecter ou exécuter 'exec bash' dans tous vos shells pour voir l'effet, voir cette question .J'ai eu le même problème et je l'ai résolu en supprimant le répertoire /etc/bash_completion.d/, puis en réinstallant bash_completion. Je suppose qu'un ancien fichier était dans ce répertoire ... Espérons que cela résoudra votre problème aussi.
la source
bash-completion
, l'un des fichiers restants/etc/bash_completion.d/
doit être le coupable. C'étaitacroread.sh
dans mon cas - ça redéfinit_filedir
.