Dlaczego bash-tab rozszerza tyldę, kiedy uzupełniam nazwę pliku vim?

8

Jeśli piszę, cat ~/.bashr<TAB>to kończy się na cat ~/.bashrc.

Jeśli piszę, vim ~/.bashr<TAB>to kończy się to vim /home/neil/.bashrc...

(Robi to samo z vialiasami "vim".)

Czy mogę to wyłączyć?

Neil
źródło

Odpowiedzi:

5

jest to kontrolowane przez / etc / bash_completion

możesz skomentować kod rozszerzenia w _expand (), jeśli ci się nie podoba.

oto moja wersja w Fedorze 17, ale twoja powinna być podobna:

# 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
źródło
1
Lokalizacja skryptów ukończenia zależy całkowicie od twojego systemu.
Daniel Beck
Hmm może. dzięki. Używam tylko Ubuntu / Fedora / Centos i wydaje się, że plik tam jest. tak, jeśli jest to kolejna dystrybucja, mogę sobie wyobrazić, że plik / funkcja znajduje się gdzie indziej, ale prawdopodobnie nadal jest kontrolowany tylko przez plik tekstowy.
johnshen64
4
Dzięki, „naprawiłem” mój problem, definiując function _expand() { :;}w sobie ~/.bashrc.
Neil
6

bashmoże zapewnić bardziej zaawansowane autouzupełnianie dla niektórych poleceń (np. autouzupełnianie argumentów programu innych niż nazwy plików). W systemie zdefiniowano taką funkcję Programowalnego Uzupełniania dla vimpolecenia.

Wpisanie completew wierszu polecenia pokaże, jakie funkcje są używane do zapewnienia autouzupełniania bash.

$ complete
complete -o default -F _complete_open open

Wpisz, type function_nameaby dowiedzieć się o ich definicji.

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

Aby dowiedzieć się, gdzie zdefiniowano funkcję. użyj następującego:

$ shopt -s extdebug
$ declare -F _complete_open
_complete_open 70 /Users/danielbeck/.bash_profile
Daniel Beck
źródło