Pourquoi bash développe-t-il un tilde lorsque je complète un nom de fichier vim?

8

Si je tape cat ~/.bashr<TAB>alors ça se termine cat ~/.bashrc.

Si je tape vim ~/.bashr<TAB>alors ça se termine à vim /home/neil/.bashrc...

(Il fait de même avec vi, qui est aliasé "vim".)

Puis-je désactiver cela?

Neil
la source

Réponses:

5

ceci est contrôlé par / etc / bash_completion

vous pouvez commenter le code d'extension dans _expand () si vous ne l'aimez pas.

voici ma version dans fedora 17, mais la vôtre devrait être similaire:

# This function expands tildes in pathnames
#
_expand()
{
    # FIXME: Why was this here?
    #[ "$cur" != "${cur%\\}" ] && cur="$cur\\"

    # Expand ~username type directory specifications.  We want to expand
    # ~foo/... to /home/foo/... to avoid problems when $cur starting with
    # a tilde is fed to commands and ending up quoted instead of expanded.

    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
}
johnshen64
la source
1
L'emplacement des scripts d'achèvement dépend entièrement de votre système.
Daniel Beck
Hmm peut-être. Merci. J'utilise uniquement ubuntu / fedora / centos ces jours-ci et il semble que le fichier soit là. oui, si c'est une autre distribution, je peux imaginer que le fichier / la fonction est situé ailleurs, mais il est probablement toujours contrôlé uniquement par un fichier texte.
johnshen64
4
Merci, j'ai "résolu" mon problème en définissant un function _expand() { :;}dans mon ~/.bashrc.
Neil
6

bashpeut fournir une saisie semi-automatique plus sophistiquée pour certaines commandes (par exemple, des arguments de programme de saisie semi-automatique autres que les noms de fichiers). Une telle fonction d' achèvement programmable est définie pour la vimcommande sur votre système.

Taper completeà l'invite de commande vous montrera quelles fonctions sont utilisées pour fournir la saisie semi-automatique bash.

$ complete
complete -o default -F _complete_open open

Tapez type function_namepour en savoir plus sur leur définition.

$ type _complete_open
_complete_open is a function
_complete_open () 
{ 
   # function definition
}

Pour savoir où la fonction a été définie. utilisez le suivant:

$ shopt -s extdebug
$ declare -F _complete_open
_complete_open 70 /Users/danielbeck/.bash_profile
Daniel Beck
la source