¿Por qué bash tab-expande una tilde cuando estoy completando un nombre de archivo vim?


8

Si escribo cat ~/.bashr<TAB>, se completa a cat ~/.bashrc.

Si escribo vim ~/.bashr<TAB>, se completa con vim /home/neil/.bashrc...

(Hace lo mismo con vi, alias "vim").

¿Puedo apagar eso?

Respuestas:


5

esto está controlado por / etc / bash_completion

puede comentar el código de expansión en _expand () si no le gusta.

Aquí está mi versión en Fedora 17, pero la suya debería ser similar:

# 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
La ubicación de los scripts de finalización depende completamente de su sistema.
Daniel Beck

Hmm puede ser. Gracias. Solo uso ubuntu / fedora / centos en estos días y parece que el archivo está allí. Sí, si se trata de otra distribución, puedo imaginar que el archivo / función se encuentra en otro lugar, pero aún así es probable que solo esté controlado por un archivo de texto.
johnshen64

44
Gracias, "solucioné" mi problema definiendo un function _expand() { :;}en mi ~/.bashrc.
Neil

6

bashpuede proporcionar un autocompletado más sofisticado para ciertos comandos (por ejemplo, autocompletar argumentos del programa que no sean nombres de archivo). Existe una función de finalización programable definida para el vimcomando en su sistema.

Escribir completeen el símbolo del sistema le mostrará qué funciones se utilizan para proporcionar el autocompletado bash.

$ complete
complete -o default -F _complete_open open

Escriba type function_namepara conocer su definición.

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

Para averiguar dónde se definió la función. usa lo siguiente:

$ shopt -s extdebug
$ declare -F _complete_open
_complete_open 70 /Users/danielbeck/.bash_profile
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.