ZSH para completar automaticamente os diretórios em argumentos de linha de comando?

3

Transferido do StackOverflow normal ...

Eu sou um novo ZSH converter no OSX (status git no prompt foi o meu principal piloto para dar o salto). Tudo parece estar funcionando bem, mas estou sentindo falta de algo da BASH.

No BASH eu começaria a executar um script PHP CLI que é construído em torno das ferramentas CLI do Symfony.

Normalmente, eu executaria o comando assim:

$> php doctrine --configuration=../conf/doctrine.xml migrations:migrate

No BASH eu seria capaz de usar a tecla TAB enquanto digito a porção ../conf/doctrine.xml para completar os diretórios.

No ZSH, pressionando a tecla TAB enquanto digita o diretório resulta em ... nada.

Existe uma configuração no ZSH ou uma configuração que eu possa definir para habilitar esse comportamento de tentar completar quase tudo que se parece com um diretório?

    
por dcousineau 19.10.2010 / 20:08

1 resposta

5

Zsh está tentando ser inteligente na escolha de conclusões, mas não é inteligente o suficiente para saber que depois de doctrine --configuration= , ele deve completar um nome de arquivo. Bash é inteligente o suficiente para analisar este comando corretamente, ou muito estúpido para completar qualquer coisa, exceto um nome de arquivo aqui.

Você pode escrever uma função de conclusão para doctrine . Isto é um pouco avançado, entretanto - as funções de conclusão tendem a ser um pouco misteriosas. Você pode achar mais fácil escrever um completer usando o sistema de conclusão alternativo, antigo, mais simples, mas menos poderoso do zsh, compctl (documentado na página zshcompctl man).

Se você tiver uma função de conclusão do bash para doctrine , talvez seja possível obter o zsh para lê-lo incluindo autoload bashcompinit; bashcompinit no seu ~/.zshrc . Veja Alternando do bash no wiki do zsh .

Você pode achar útil associar algumas chaves a _bash_complete-word . Esse widget (comando interativo) executa a conclusão de alguns tipos internos, dependendo do último caractere na sequência de chaves que chamou o widget: / para diretórios, $ para nomes de parâmetros, etc. Por exemplo, incluir bindkey '^X/' _bash_complete-word em seu ~/.zshrc e pressione Ctrl + X / para completar um nome de arquivo em qualquer contexto (talvez seja necessário inserir temporariamente um espaço antes do nome do arquivo, se o nome do arquivo for precedido por uma pontuação que não seja um separador de palavras no shell).

    
por 19.10.2010 / 22:38