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

8

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

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

(Faz o mesmo com vi, que é aliasado a "vim".)

Posso desligar isso?

Neil
fonte

Respostas:

5

isso é controlado por / etc / bash_completion

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

aqui está 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
}
johnshen64
fonte
1
A localização dos scripts de conclusão depende inteiramente do seu sistema.
Daniel Beck
Hmm talvez. obrigado. Eu só uso o ubuntu / fedora / centos hoje em dia e parece que o arquivo está lá. Sim, se for outra distribuição, posso imaginar que o arquivo / função esteja localizado em outro lugar, mas ainda é provável que ainda seja controlado apenas por um arquivo de texto.
johnshen64
4
Obrigado, "corrigi" o meu problema definindo um function _expand() { :;}no meu arquivo ~/.bashrc.
28412 Neil
6

bashpode fornecer preenchimento automático mais sofisticado para determinados comandos (por exemplo, argumentos do programa de preenchimento automático que não sejam nomes de arquivos). Existe uma função de conclusão programável definida para o vimcomando no seu sistema.

Digitar completeno prompt de comando mostrará para que funções são usadas o fornecimento automático bash.

$ complete
complete -o default -F _complete_open open

Digite type function_namepara 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
Daniel Beck
fonte