Por que bash tab-expand um til quando eu estou completando um nome de arquivo vim?

7

Se eu digitar cat ~/.bashr<TAB> , ele será concluído em cat ~/.bashrc .

Se eu digitar vim ~/.bashr<TAB> , ele será concluído em vim /home/neil/.bashrc ...

(Faz o mesmo com vi , que é aliado para "vim" .)

Posso desativar isso?

    
por Neil 28.06.2012 / 21:37

2 respostas

4

isso é controlado por / etc / bash_completion

você pode comentar o código de expansão em _expand () se você não gostar dele.

aqui está a minha versão no fedora 17, mas a sua deve ser semelhante:

# 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
}
    
por 28.06.2012 / 21:40
6

bash pode fornecer autocompletar mais sofisticado para determinados comandos (por exemplo, argumentos de autocompletar programas que não sejam nomes de arquivos). Existe uma função de Completação Programável definida para o comando vim em seu sistema.

Digitar complete no prompt de comando mostrará quais funções são usadas para fornecer autocompletar para bash .

$ complete
complete -o default -F _complete_open open

Digite type function_name para aprender sobre sua definição.

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

Para descobrir onde a função foi definida. use o seguinte:

$ shopt -s extdebug
$ declare -F _complete_open
_complete_open 70 /Users/danielbeck/.bash_profile
    
por 28.06.2012 / 21:50