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 zstyle
built-in define (principalmente) as configurações de conclusão. O matcher-list
estilo 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-patterns
estilo 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 vi
e, view
mas não vim
, pressionar Tabdepois vi
, a oferta será oferecida vi
e, view
mas não _vim
, mas se você digitar vim
, a conclusão será oferecida _vim
.