zsh의 완성 목록이 매우 유용하다고 생각 Tab하지만 동작을 약간 조정하고 싶습니다.
Tab처음 나타날 때 나타나야 하며 새 문자가 추가될 때마다 동적으로 업데이트되어야 합니다 . 기본 동작은 Tab"이 반복되는 키 입력을 저장하고 싶습니다"라는 경우에만 제안이 재평가된다는 것입니다. (고쳐 쓰다:그러나 가능한 완료 항목만 나열되어 있으므로 옵션이 하나만 남아 있더라도 실제 프롬프트 줄을 자동으로 수정해서는 안 됩니다. )
이 동작을 달성할 수 있는 방법이 있나요?
답변1
나는 당신이 원하는 것을 정확히 수행하는 플러그인을 만들었습니다.https://github.com/marlonrichert/zsh-autocomplete
입력할 때 자동으로 완성 옵션을 나열하며, 이를 삽입하거나 다른 키보드 단축키를 누를 필요가 없습니다. ctrl-x+i 또는 ctrl-d 또는 이와 유사한 키를 누를 필요가 없습니다. 화면에 맞는 한 항상 자동으로 모든 항목을 나열합니다.
그런 다음 Tab 키를 눌러 상위 일치 항목을 삽입하거나 Down 키를 눌러 메뉴 선택을 시작하세요.
위 페이지에서 데모를 보고 원하는 것이 맞는지 확인할 수 있습니다.
답변2
원하는 솔루션을 제공할 수 있는 한 가지 접근 방식은 다음과 같습니다 incremental-complete-word
.
zle -N incremental-complete-word
bindkey '^Xi' incremental-complete-word
그러면 함수가 로드되어 Ctrl- 에 바인딩됩니다 X i. 이제 시도해 볼 수 있습니다:
> k^Xi
incremental (complete): -no prefix-
k
이 예에서는 문자를 먼저 입력한 다음 Control-X i를 입력합니다.
> kil
incremental (complete): kill
를 입력한 후에 il
는 이제 하나의 완성( )이 가능합니다 kill
. 이를 수락하고 Enter 키를 누를 수 있습니다.
> kill^D
incremental (complete): -no prefix-
- external command -
kill killall killall5
입력하면 zsh Ctrl가 D가능한 완료를 표시합니다.
에서 zshcontrib(1)
:
증분 완전한 단어
이를 통해 단어를 점진적으로 완성할 수 있습니다. 이 명령을 시작하면 입력한 각 문자 뒤에 완성 옵션 목록이 나타나며, ^H이를 사용하거나 제거할 수 있습니다 DEL. 지금까지의 완료를 승인하고 일반 편집으로 돌아가려면 Enter를 누르십시오(즉, 명령줄이 즉시 실행되지 않습니다). 클릭 TAB하여 정상적으로 완료하고, ^G 시작한 곳으로 다시 돌아가고, ^D일치하는 항목을 나열할 수 있습니다.