É possível fazer o Zsh parar de tentar corrigir argumentos que não se destinam a ser arquivos com arquivos do diretório atual sem desligar completamente a correção ou limitá-la a setopt CORRECT
(corrigir apenas o comando)?
Por exemplo, quando CORRECT_ALL
está definido com setopt
, isso acontece:
gris@arefiev: ~% cd srcc
change srcc to src-nyae? n
Até agora, bom (o argumento cd
deveria ser um arquivo). No entanto,
gris@arefiev: ~% man zile
change zile to .zile-nyae?
O que? Eu esperaria que fosse corrigido zile
quando .zile
for man
chamado com -C
opção. Ele também tenta corrigir os parâmetros do host ssh
, primeiros argumentos para sudo
etc, o que é realmente irritante.
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 CORRECT
e preferiria a muleta plus CORRECT_ALL
apenas CORRECT
.
Zsh é zsh 4.3.17 (x86_64-unknown-linux-gnu)
, Debian sid.
Atualizar: aqui está o meu.zshrc
http://pastebin.com/67mykgRv
Responder1
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 completar argumentos mkdir
(para criar diretórios dentro de diretórios existentes), mas não corrigi-los. A correct_all
opção é muito dura, pois ativa a correção em todos os lugares; infelizmente, não há opção de corrigir somente quando um conjunto de entradas corretas é fornecido.
Você pode personalizar as correções para um determinado comando definindo ocorrections
tag e personalize se deseja realizar a correção fazendo_correct
parte dematcher-list
ou não. Estes são definidos com ozstyle
construídas em.
Responder2
Parece-me que está faltando alguma coisa em sua distribuição. A maioria das implementações de ZSH vem com uma grande coleção de configurações de conclusão pré-configuradas para ZSH que são concluídas de forma inteligente com base na posição do comando e do argumento. Por exemplo, no meu sistema há umconclusões zshpacote. Quando instalado e carregado corretamente, man
completa apenas com coisas encontradas nas páginas de manual, não com arquivos, ssh
apenas com nomes de host, ssh -l
completaria com nomes de usuário do sistema, mas depois ssh -l caleb
voltaria a completar com nomes de host, etc.
Você deve verificar quais pacotes zsh estão disponíveis e se está carregando as configurações padrão corretamente. Você não deveria ter que configurar um monte de substituições manuais para comandos padrão, como você lista em sua pergunta.