저는 zsh와 "새로운" 완성 시스템( compinit
)을 사용하고 있습니다. 때때로 나는 모호성을 줄이기 위해 가능성의 하위 집합으로 완성을 제한하고 싶습니다. 이것은 구성 설정이 아니라 사용자 선택입니다. Tab다른 완성 세트를 얻는 대신 다른 키를 누르고 싶습니다 .이 명령에 대해 다른 완성을 구성하고 싶지 않습니다.. Tab여전히 정상적인 일을 해야 합니다.
어떤 경우에는 해결 방법이 있습니다. 예를 들어 키가 바인딩되어 _bash_complete-word
있으며 대부분의 경우 파일이 완성됩니다. 그러나 때로는 덜 일반적인 초점을 원합니다. 예를 들어:
scp
뒤에는 로컬 파일 이름이 아닌 호스트 이름만 입력하세요 .- 뒤에는 원격 이름만 입력하고
git checkout
지점 이름은 입력하지 마세요.
git checkout
지점 이름이 아닌 원격 이름을 사후 완성하는 키를 바인딩하는 방법은 무엇입니까 ? 보다 일반적으로 현재 컨텍스트에서 일반적으로 수행되는 작업과 다른 작업을 수행하기 위해 키를 어떻게 바인딩합니까?
답변1
다음 코드 조각을 사용하면 Metagit r원격 이름이 git 명령줄에서 완성되고 호스트 이름이 다른 곳에서 완성됩니다.
_complete-remotes () {
case $words[1] in
git) load_helper_functions _git; __git_remotes;;
*) _hosts;;
esac
}
compdef -k _complete-remotes complete-word '^[r'
- 바라보다다른 ZSH 완료 파일에서 도우미 기능을 사용할 수 있나요?을 위한
load_helper_functions
. 위 코드에서 이를 제거하면git
현재 zsh 세션에서 이전에 한 번 이상 완료가 수행된 경우에만 작동합니다. $words[1]
매개변수로 완성되는 명령의 첫 번째 단어입니다.complete -k …
함수를_complete-remotes
완성 위젯으로 등록하고(완성 내장 함수를 실행할 수 있도록 함) Meta+ 에 바인딩합니다 r.