Perché bash tab-espande una tilde quando sto completando un nome file vim?


8

Se scrivo cat ~/.bashr<TAB> quindi completa a cat ~/.bashrc.

Se scrivo vim ~/.bashr<TAB> quindi completa a vim /home/neil/.bashrc...

(Fa lo stesso con vi, che è aliasato a "vim".)

Posso disattivarlo?

Risposte:


5

questo è controllato da / etc / bash_completion

puoi commentare il codice di espansione in _expand () se non ti piace.

ecco la mia versione in fedora 17, ma la tua dovrebbe essere simile:

# 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
}

1
L'ubicazione degli script di completamento dipende interamente dal tuo sistema.
Daniel Beck

Hmm forse. Grazie. io uso solo ubuntu / fedora / centos in questi giorni e sembra che il file sia lì. si, se è un'altra distro, posso immaginare che il file / funzione si trovi altrove, ma è probabile che sia ancora controllato solo da un file di testo.
johnshen64

4
Grazie, ho risolto il problema definendo a function _expand() { :;} nel mio ~/.bashrc.
Neil

6

bash può fornire un completamento automatico più sofisticato per determinati comandi (ad esempio, argomenti del programma di autocompletamento diversi dai nomi dei file). C'è un tale Completamento programmabile funzione definita per vim comando sul tuo sistema.

Digitando complete al prompt dei comandi verrà mostrato quali funzioni sono utilizzate per fornire completamento automatico per bash.

$ complete
complete -o default -F _complete_open open

genere type function_name per conoscere la loro definizione.

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

Per scoprire dove è stata definita la funzione. utilizza il seguente:

$ shopt -s extdebug
$ declare -F _complete_open
_complete_open 70 /Users/danielbeck/.bash_profile
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.