Si je tape cat ~/.bashr
alors cela se complète en cat ~/.bashrc
.
Si je tape vim ~/.bashr
alors cela se complète en vim /home/neil/.bashrc
...
(Cela fonctionne de la même manière avec vi
, qui est aliasé en "vim"
.)
Puis-je désactiver cela?
Si je tape cat ~/.bashr
alors cela se complète en cat ~/.bashrc
.
Si je tape vim ~/.bashr
alors cela se complète en vim /home/neil/.bashrc
...
(Cela fonctionne de la même manière avec vi
, qui est aliasé en "vim"
.)
Puis-je désactiver cela?
bash
peut fournir une autocomplétion plus sophistiquée pour certains commandes (par exemple, l'autocomplétion des arguments de programme autres que les noms de fichiers). Une telle fonction Completion Programmable est définie pour la commande vim
sur votre système.
En tapant complete
à l'invite de commande, vous verrez quelles fonctions sont utilisées pour fournir l'autocomplétion pour bash
.
$ complete
complete -o default -F _complete_open open
Tapez type nom_fonction
pour en apprendre davantage sur leur définition.
$ type _complete_open
_complete_open est une fonction
_complete_open ()
{
# définition de la fonction
}
Pour savoir où la fonction a été définie, utilisez ce qui suit :
$ shopt -s extdebug
$ declare -F _complete_open
_complete_open 70 /Users/danielbeck/.bash_profile
Cela est contrôlé par /etc/bash_completion
vous pouvez commenter le code d'expansion dans _expand() si vous ne l'aimez pas.
voici ma version dans Fedora 17, mais la vôtre devrait être similaire :
# Cette fonction expand les tildes dans les chemins des fichiers
#
_expand()
{
# FIXME: Pourquoi était-ce ici?
#[ "$cur" != "${cur%\\}" ] && cur="$cur\\"
# Élargir les spécifications de répertoire de type ~nom_utilisateur. Nous voulons développer
# ~foo/... en /home/foo/... pour éviter des problèmes lorsque $cur commençant par
# un tilde est envoyé aux commandes et se retrouve entre guillemets au lieu d'être développé.
if [[ "$cur" == \~*/* ]]; then
eval cur=$cur
elif [[ "$cur" == \~* ]]; then
cur=${cur#\~}
COMPREPLY=( $( compgen -P '~' -u "$cur" ) )
[ ${#COMPREPLY[@]} -eq 1 ] && eval COMPREPLY[0]=${COMPREPLY[0]}
return ${#COMPREPLY[@]}
fi
}
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.