현재 디렉토리에 C++ 소스 파일 hello_world.cpp
과 해당 컴파일된 실행 가능 바이너리가 있는 경우 실행 파일의 파일 이름 , , 및 (및 , , , 등 ) hello_world
을 완전히 무시(즉, 렌더링 방지)하는 bash의 자동 완성 기능을 갖고 싶습니다 . 명령.vim
vi
nano
nvim
less
cat
more
nl
head
tail
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