Zsh 자동 완성 기능은 완전한 기능을 제안합니다 (_git _vim 등). 하는 방법에 대해 약간의 성가심이 있습니다. 설치하지

zsh내 명령에 대한 완전한 제안을 하는 방법에 대해 약간의 성가심이 있습니다.

설치하지 않은 명령의 시작 부분을 입력하고 누르면 tab완료 기능이 설치되어 있음을 나타냅니다.

내가 실행하고 vim싶지만 설치되어 있지 않다고 말합시다 _vim.

이것을 끄는 방법이 있습니까? 또는 설정에서 무언가 잘못한 적이 있습니까?

내 모든 도트 파일은에 공개됩니다 github.com/henrikbjorn/castle.



답변

기본적으로 zsh의 완성 엔진은 입력 한 내용에만 무언가를 추가하려고합니다. 접두사를 추가하도록 구성했습니다. 간단한 대화식 완성 구성 엔진 ( compinstall)은“일치 제어 → 하위 문자열 완성”에서이를 제공합니다. 이렇게하면 다음과 같은 줄이 삽입됩니다 .zshrc.

zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'

zstyle내장 세트 (대부분) 완료 설정. matcher-list완료 스타일은 적어도 하나의 일치가있을 때 중지 연속적으로 시도 할 수있는 방법의 목록입니다. 빈 문자열은 기본 완성을 의미합니다 (접미사 만 해당). 일치 제어 주문의 l:|=* r:|=*수단은 접두사 일치 시도 *와 접미사 일치를 *어떤 접두사와 접미사, 즉.

_모두로 시작하는 접두사를 금지 할 수 있습니다 . 그래도으로 시작하는 단어를 _완성하고 접두사를 추가하여 완성 할 수 있지만 접두사가로 시작하지 않을 수 있습니다 _.

zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'

이것은 명령 이름의 완료뿐만 아니라 모든 완료에 적용됩니다. 이것을 명령 이름으로 제한하는 방법을 모르겠습니다.

로 시작하는 명령 이름을보다 정확하게 제외시키는 방법이 있어야 _하지만 방법을 모르겠습니다. 첫 번째 시작은 ignored-patterns완성 스타일입니다.

zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'       

_;로 시작하는 일치 항목은 제외합니다 . 그러나 일치하는 항목이 없으면 zsh는 무시 규칙없이 다시 시도합니다. 이것의 장점은 처음에 명령이 밑줄로 시작하면이 두 번째 단계에서 완료된다는 것입니다. 나쁜 부분은 당신이 그렇다면, 따라서과 일치하는 데이터가 존재하지 않는 경우 어쨌든 밑줄을 추가하려고 할 것이다 zsh을 것입니다 viview하지만 vim다음 Enter 키를 눌러 Tabvi의지 제공 vi하고 view있지만 _vim, 그러나 당신이 입력하면 vim다음 완료를 제공 할 것입니다 _vim.