vim 파일 이름을 완성 할 때 bash 탭이 물결표로 나타나는 이유는 무엇입니까?


8

입력 cat ~/.bashr<TAB>하면로 완료됩니다 cat ~/.bashrc.

입력하면 vim ~/.bashr<TAB>다음과 같이 완료됩니다 vim /home/neil/.bashrc.

(와 vi별칭이 같은와 동일 합니다 "vim".)

끌 수 있나요?

답변:


5

이것은 / etc / bash_completion에 의해 제어됩니다

확장 코드가 마음에 들지 않으면 _expand ()에서 확장 코드를 주석 처리 할 수 ​​있습니다.

다음은 fedora 17의 내 버전이지만 유사해야합니다.

# 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
완료 스크립트의 위치는 전적으로 시스템에 따라 다릅니다.
Daniel Beck

흠. 감사. 나는 요즘 우분투 / fedora / centos 만 사용하고 파일이있는 것 같습니다. 예, 다른 배포판 인 경우 파일 / 기능이 다른 위치에 있다고 생각할 수 있지만 여전히 텍스트 파일로 제어됩니다.
johnshen64

4
고마워, function _expand() { :;}내에 를 정의하여 내 문제를 "수정" 했습니다 ~/.bashrc.
Neil

6

bash특정 명령에 대해보다 정교한 자동 완성 기능을 제공 할 수 있습니다 (예 : 파일 이름 이외의 자동 완성 프로그램 인수). 시스템에 명령에 대해 이러한 프로그래밍 가능 완료 기능이 정의 vim되어 있습니다.

complete명령 프롬프트에 입력 하면 자동 완성 기능을 제공하는 데 사용되는 기능이 표시됩니다 bash.

$ complete
complete -o default -F _complete_open open

type function_name정의에 대해 배우려면 입력하십시오 .

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

함수가 정의 된 위치를 찾습니다. 다음을 사용하십시오.

$ shopt -s extdebug
$ declare -F _complete_open
_complete_open 70 /Users/danielbeck/.bash_profile
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.