zsh solicita a correção do executável ao executar o pacote exec

3

por que o zsh pede para corrigir o rspec para a especificação ao executar o bundler?

✗ rspec --version
2.12.2
✗ bundle exec rspec --version
zsh: correct 'rspec' to 'spec' [nyae]? n
2.12.2

sistema:

  • ubuntu 12.10
  • usando rvm

como faço para corrigir isso? Obrigado!

UPDATE:

acertando ctrl-x h em bundle exec como solicitado por @mpy

 ✗ bundle exec
tags in context :completion::complete:bundle::
    all-files  (_files _default (eval))

UPDATE 2:

[[ -o correctall ]] && echo enabled
enabled   # on both machines

Responder ao comentário: spec é um diretório

Eu segui a instalação manual do link

✗ echo $fpath
/home/ole/app/zsh-completions/src /scripts/zsh/Completion /home/ole/.oh-my-zsh/plugins/ruby /home/ole/.oh-my-zsh/plugins/bundler /home/ole/.oh-my-zsh/plugins/zeus /home/ole/.oh-my-zsh/plugins/rvm /home/ole/.oh-my-zsh/plugins/rails3 /home/ole/.oh-my-zsh/plugins/git-extras /home/ole/.oh-my-zsh/plugins/git-flow /home/ole/.oh-my-zsh/plugins/git /home/ole/.oh-my-zsh/functions /home/ole/.oh-my-zsh/completions /usr/local/share/zsh/site-functions /usr/share/zsh/vendor-functions /usr/share/zsh/vendor-completions /usr/share/zsh/functions/Calendar /usr/share/zsh/functions/Chpwd /usr/share/zsh/functions/Completion /usr/share/zsh/functions/Completion/AIX /usr/share/zsh/functions/Completion/BSD /usr/share/zsh/functions/Completion/Base /usr/share/zsh/functions/Completion/Cygwin /usr/share/zsh/functions/Completion/Darwin /usr/share/zsh/functions/Completion/Debian /usr/share/zsh/functions/Completion/Linux /usr/share/zsh/functions/Completion/Mandriva /usr/share/zsh/functions/Completion/Redhat /usr/share/zsh/functions/Completion/Solaris /usr/share/zsh/functions/Completion/Unix /usr/share/zsh/functions/Completion/X /usr/share/zsh/functions/Completion/Zsh /usr/share/zsh/functions/Completion/openSUSE /usr/share/zsh/functions/Exceptions /usr/share/zsh/functions/MIME /usr/share/zsh/functions/Misc /usr/share/zsh/functions/Newuser /usr/share/zsh/functions/Prompts /usr/share/zsh/functions/TCP /usr/share/zsh/functions/VCS_Info /usr/share/zsh/functions/VCS_Info/Backends /usr/share/zsh/functions/Zftp /usr/share/zsh/functions/Zle

$ fpath foi alterado. Não teve efeito.

trecho do meu .zshrc

# Path to your oh-my-zsh configuration.
ZSH=$HOME/.oh-my-zsh
ZSH_THEME="robbyrussell"

# Which plugins would you like to load? (plugins can be found in ~/.oh-my-zsh/plugins/*)
# Custom plugins may be added to ~/.oh-my-zsh/custom/plugins/
# Example format: plugins=(rails git textmate ruby lighthouse)

plugins=(git git-flow git-extras rails3 rvm zeus bundler ruby)

source $ZSH/oh-my-zsh.sh   

# Customize to your needs...
export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

PATH=$PATH:/usr/lib/postgresql/9.1/bin/
export JAVA_HOME=$HOME/app/jdk1.7.0_15

fpath=($HOME/app/zsh-completions/src $fpath)

minhas alterações usaram

- plugins=(git rails ruby)
+ plugins=(git git-flow git-extras rails3 rvm zeus bundler ruby)

+ fpath=($HOME/app/zsh-completions/src $fpath)

e isso não teve efeito. O erro persistir (eu abro uma nova guia de terminal a cada vez)

    
por oma 05.03.2013 / 13:06

2 respostas

4

Porque ele acha que o rspec é um erro ortográfico de especificação?

  • Você pode usar nocorrect (por exemplo, alias bundle='nocorrect bundle' ),
  • ou simplesmente pare de usar a correção da linha de comando.
  • ou use CORRECT em vez de CORRECT_ALL , que é o que você parece estar usando

[edit] Observe que o zsh está usando as funções do completer para determinar o que esperar. No segundo caso, está usando o completer para bundle

    
por 06.03.2013 / 09:23
1

A verificação ortográfica automática pode ser ativada de duas maneiras (eu uso "Do bash ao Z Shell" por O. Kiddle et al. como um guia / referência):

  • setopt correct

    Depois de pressionar Enter, zsh "olha a palavra de comando e, se não a reconhece como um comando, tenta encontrar uma correção, que então lhe oferece".

  • setopt correctall

    Como correct , mas, além disso verifica os "argumentos após o comando. No entanto, ele simplesmente assumens eles são arquivos, e tenta corrigir as palavras para nomes de arquivos. Muitas vezes não é o que você quer "

Então, o último explica, porque você recebe spec oferecido como correção para rspec - zsh acha que deveria ser um arquivo (ou no seu caso um diretório). Não explica, porque está trabalhando na outra máquina. (Suponho que alguma configuração diferente em seus arquivos de configuração pessoais ou globais ( ~/.zshrc ou /etc/zsh/ ), menos provavelmente um problema de versão.)

[Intimamente relacionado a esta verificação ortográfica bastante simples é uma característica do sistema de conclusão, chamado de "conclusão aproximada". O sistema de conclusão é zsh é um muito avançado vale a pena um estudo próprio. (*) Como eu não uso essa "conclusão aproximada" eu quero direcioná-lo para man zshcompsys , seção "FUNÇÕES DO CONTROLO" _approximate . se você estiver interessado.]

Mas, a menos que tenha razões especiais para isso, eu usaria unsetopt correctall && setopt correct para se livrar do comportamento descrito (que é o último ponto proposto por Francisco) e usar uma função de conclusão decente para 'pacote (que é o meu último comentário) .

Com o auxílio de funções de conclusão, o zsh fica bastante "inteligente". Portanto, ele sabe, por exemplo, que após o sudo um comando deve seguir, portanto sudo pass TAB será completado em sudo passwd . Você usa bundle , para o qual há também uma função de conclusão, mas, obviamente, não incluído por defeito (**) Com que você vai obter um bom lembrete de opções do pacote:.

$ bundle -TAB-
check     -- Determine whether the requirements for your application are installed
config    -- Specify and read configuration options for bundler
console   -- Start an IRB session in the context of the current bundle
exec      -- Execute a script in the context of the current bundle
gem       -- Create a simple gem, suitable for development with bundler
...

e depois de digitar bundle exec , você receberá apenas os comandos apresentados. Eu prefiro esse comportamento muito mais do que correção, mas depende de você.

(*) É ativado por autoload -U compinit && compinit . Para verificar se está ativo (provavelmente é), use which compinit :

$ zsh -f

$ which compinit
compinit not found

$ autoload -U compinit

$ which compinit
compinit () {
# undefined
builtin autoload -XU
}

(**) Cópia para um diretório que está na sua $fpath

    
por 07.03.2013 / 12:29