Zsh 자동 완성 기능은 완전한 기능을 제안합니다 (_git _vim 등).


9

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

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

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

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

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


나는이 동작을 전에 보았지만 현재 설정에서는 존재하지 않는 것 같습니다. 슬프게도, 나는 실마리가 없으며, 내 설정 중 어떤 것이 그 행동을 바꾸 었는지.
Customizer

답변:


8

기본적으로 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.


감사는 지정한 솔루션 중 하나를 수행하여 작동하는 것처럼 보이며 작동 방식에 대해 많은 것을 배웠습니다.
Henrik Bjørnskov

2
ignore-patterns일치 하는 솔루션이 없어도 솔루션이 제대로 작동합니다. completer포함되어 있지 않은지 확인해야했습니다 _ignored.
Adaephon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.