Zsh - autocorreção mais inteligente

4

É possível fazer com que o Zsh pare de tentar corrigir argumentos que não devem ser arquivos com arquivos do diretório atual sem desativar completamente a correção ou limitá-la a setopt CORRECT (somente corrija o comando)?

Por exemplo, quando CORRECT_ALL é definido com setopt , isso acontece:

 gris@arefiev: ~% cd srcc 
change srcc to src-nyae? n

Até agora, bom (argumento para cd deve ser um arquivo). No entanto,

 gris@arefiev: ~% man zile
change zile to .zile-nyae? 

O que? Eu esperaria que ele corrigisse zile para .zile quando man fosse chamado com a opção -C . Ele também tenta corrigir os parâmetros do host de ssh , os primeiros argumentos para sudo etc, o que é realmente irritante.

Eu tenho que recorrer a uma muleta: set alias man='nocorrect man' etc etc, para cada comando afetado, mas claramente não é a melhor solução. Eu também não gosto de CORRECT e preferiria a muleta mais CORRECT_ALL a apenas CORRECT .

Zsh é zsh 4.3.17 (x86_64-unknown-linux-gnu) , sid do Debian.

Atualizar : aqui está o meu link .zshrc

    
por Mischa Arefiev 09.04.2012 / 13:01

2 respostas

5

O Zsh vem com um grande conjunto de conclusões, mas um conjunto menor de correções. Existem muitos comandos para os quais a conclusão é útil, mas não a correção; por exemplo, é útil concluir argumentos para mkdir (para criar diretórios dentro de diretórios existentes), mas não para corrigi-los. A opção correct_all é muito dura, pois ativa a correção em todos os lugares; infelizmente, não há opção para corrigir somente quando um conjunto de entradas corretas é fornecido.

Você pode personalizar as correções para um determinado comando definindo a corrections , e personalize se deseja fazer a correção, tornando _correct parte do matcher-list ou não. Estes são definidos com o zstyle incorporado.

    
por 10.04.2012 / 02:26
0

Parece-me que está a perder algo na sua distribuição. A maioria das implementações ZSH vem com uma grande coleção de configurações de conclusão pré-configuradas para o ZSH que são concluídas de maneira inteligente com base na posição de comando e argumento. Por exemplo, no meu sistema existe um pacote zsh-completions . Quando instalado e carregado corretamente, man é concluído apenas com itens encontrados nas páginas man e não com arquivos, ssh apenas com nomes de host, ssh -l seria preenchido com nomes de usuário do sistema, mas depois ssh -l caleb retornaria ao preenchimento com nomes de host, etc.

Você deve verificar quais pacotes zsh estão disponíveis e se você está carregando as configurações padrão corretamente. Você não precisa configurar um monte de over-rides manuais para comandos padrão, como você faz em sua lista.

    
por 09.04.2012 / 13:37

Tags