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.