O Zsh auto complete sugere funções completas (_git _vim etc)


9

Eu tenho um pequeno aborrecimento em como zshestá fazendo sugestões completas para meus comandos.

Se eu digitar o início de um comando que não tenho instalado e pressionar, tabele sugerirá a função de conclusão que está instalada.

Digamos que eu queira executar, vimmas não está instalado, ele sugerirá _vim.

Existe uma maneira de desativar isso? Ou fiz algo errado na minha configuração?

Todos os meus arquivos de ponto são públicos em github.com/henrikbjorn/castle.


Já vi esse comportamento antes, mas na minha configuração atual não parece estar presente. Infelizmente, eu não tenho idéia, quais das minhas configurações mudaram esse comportamento.
Customizer

Respostas:


8

Por padrão, o mecanismo de conclusão do zsh tenta apenas acrescentar algo ao que você digita. Você o configurou para tentar adicionar um prefixo também. O mecanismo simples de configuração de conclusão interativa ( compinstall) oferece isso em "controle correspondente → conclusão da substring". Isso insere uma linha como esta no seu .zshrc:

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

O zstylebuilt-in define (principalmente) as configurações de conclusão. O matcher-listestilo de conclusão é uma lista de maneiras de tentar em sucessão, parando quando houver pelo menos uma correspondência. A cadeia vazia significa a conclusão padrão (apenas sufixos). O encantamento de controle correspondentel:|=* r:|=* significa tentar uma correspondência de prefixo *e de sufixo *, ou seja, qualquer prefixo e sufixo.

Você pode proibir prefixos que começam por _completo. Isso ainda permite a conclusão de palavras que começam com _e a adição de um prefixo, mas o prefixo pode não começar _.

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

Isso se aplica a todas as conclusões, não apenas às conclusões de nomes de comandos. Não sei como restringir isso a nomes de comandos.

Deve haver uma maneira de excluir com mais precisão os nomes de comandos que começam com _, mas não sei como. Uma primeira partida é com o ignored-patternsestilo de conclusão.

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

Isso exclui correspondências que começam com _; no entanto, se não houver correspondências, o zsh tenta novamente sem as regras de ignorar. O bom disso é que, se o comando começar com um sublinhado em primeiro lugar, ele será concluído nesta segunda passagem. A parte ruim é que o zsh tentará adicionar um sublinhado de qualquer maneira, se não houver correspondências; portanto, se você tiver vie, viewmas não vim, pressionar Tabdepois vi, a oferta será oferecida vie, viewmas não _vim, mas se você digitar vim, a conclusão será oferecida _vim.


Obrigado parece funcionar, fazendo uma das soluções que você especificou, também eu aprendi um monte sobre a forma como ele funciona.
Henrik Bjørnskov 21/02

2
A solução ignore-patternsfunciona bem para mim, mesmo que não haja correspondências. Só tinha que ter certeza de que completernão contém _ignored.
Adaephon
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.