특정 명령 및 특정 파일 형식 조합에 대해 bash 자동 완성을 비활성화합니다.

특정 명령 및 특정 파일 형식 조합에 대해 bash 자동 완성을 비활성화합니다.

현재 디렉토리에 C++ 소스 파일 hello_world.cpp과 해당 컴파일된 실행 가능 바이너리가 있는 경우 실행 파일의 파일 이름 , , 및 (및 , , , 등 ) hello_world을 완전히 무시(즉, 렌더링 방지)하는 bash의 자동 완성 기능을 갖고 싶습니다 . 명령.vimvinanonvimlesscatmorenlheadtail

C++ 소스 파일 이름 완성은 누른 후 즉시 계속되어야 합니다 TAB.vim hello_wor

이 행동을 어떻게 달성할 수 있습니까?

답변1

이러한 명령에 대해 프로그래밍 가능한 완성 함수를 직접 작성할 수 있습니다. 이를 호출 _cpp하고 설정해 보겠습니다.

complete -F _cpp vim vi nano nvim less cat more nl head tail

지금은 전체 함수를 작성하지 않겠지만 다음과 같이 일치 항목을 생성(및 삭제)하게 됩니다.

files=( $(compgen -f hello_) )
COMPREPLY=()
for word in "${files[@]}"; do
    if [[ $word = *.cpp ]]; then
        COMPREPLY+=("$word")
    else
        if [[ ! -f "${word}.cpp" ]]; then
            COMPREPLY+=("$word")
        fi
    fi
done

이는 다음을 touch hello_world hello_world.cpp hello_world2제공합니다:

echo ${COMPREPLY[@]}
hello_world.cpp hello_world2

관련 정보