Não tente corrigir um comando que existe agora

3

Eu gosto da correção automática do zsh para comandos. No entanto, ele tem um recurso irritante: às vezes, tento executar um comando, percebo que ele não existe, instalo-o e, em seguida, tento executá-lo novamente, e o zsh ainda deseja fazer a mesma correção. Zsh faz isso porque mantém um hash de caminhos de comando e não vai além do hash ao fazer autocorreção. Se eu disser n para a correção depois de instalar o comando, o comando será executado, mas devo dizer n novamente toda vez que eu quiser executar o comando ou atualizar o comando hash em cada instância em execução chamando o hash builtin.

Eu quero que o zsh mantenha um hash de caminhos de comando, e eu quero manter a autocorreção (ou seja, eu digito um nome de comando e pressiono Enter como de costume, e o zsh sugere uma correção se o comando fizer não existe). No entanto, eu quero "o comando não existe" para significar que o comando não está em $path neste momento, não que o comando não exista.

Etapas para reproduzir:

$ mkdir /tmp/test
$ cp /bin/true /tmp/test/wibble
$ PATH=/tmp/test:/bin zsh -f -o correct
darkstar% wobble
zsh: correct 'wobble' to 'wibble' [nyae]? a
darkstar% cp /tmp/test/{wibble,wobble}
darkstar% wobble
zsh: correct 'wobble' to 'wibble' [nyae]? n

Comportamento desejado: quando wobble existe, não solicite a correção. Como posso fazer isso?

    
por Gilles 19.05.2018 / 20:50

1 resposta

0

Como mencionado por @ user1934428 , você pode recriar a tabela de hash explicitamente executando rehash . Para evitar fazer isso manualmente, coloque isso no seu zshrc :

zstyle ":completion:*:commands" rehash 1

Você pode descobrir mais sobre zstyle da página zshmodule man e os próprios estilos estão documentados em zshcompsys .

    
por 13.07.2018 / 08:55