3

почему zsh просит исправить rspec для spec при запуске bundler?

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

система:

  • Убунту 12.10
  • используя рвм

Как это исправить? Спасибо!

ОБНОВИТЬ:

нажатие ctrl-x h на bundle exec в соответствии с запросом @mpy

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

ОБНОВЛЕНИЕ 2:

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

Ответ на комментарий: spec это каталог

Я следовал за ручной установкой с https://github.com/zsh-users/zsh-completions

✗ 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 изменен. Это не имело никакого эффекта.

выдержка из моего .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)

мои изменения носили

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

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

и это не имело никакого эффекта. Ошибка сохраняется (я открываю новую вкладку терминала каждый раз)

2 ответа2

4

Потому что он думает, что rspec - это ошибка в спецификации?

  • Вы можете использовать nocorrect (например, alias bundle='nocorrect bundle'),
  • или просто прекратите использовать исправление командной строки вообще.
  • или использовать CORRECT вместо CORRECT_ALL что то , что вы , кажется, использует

[edit] Обратите внимание, что zsh использует завершающие функции, чтобы определить, чего ожидать. Во втором случае он использует завершитель для bundle

1

Автоматическая проверка орфографии может быть активирована двумя способами (я использую "От bash до Z Shell" О. Киддла и др. В качестве руководства / ссылки):

  • setopt correct

    После нажатия Enter zsh «смотрит на командное слово и, если не распознает его как команду, пытается найти исправление, которое затем предлагает вам».

  • setopt correctall

    Вроде correct , но вдобавок проверяет аргументы после команды. Тем не менее, он просто предполагает, что они являются файлами, и пытается исправить слова в именах файлов. Часто это не то, что вы хотите. "

Итак, последнее объясняет, почему вы получаете spec качестве исправления для rspec - zsh считает, что это должен быть файл (или, в вашем случае, каталог). Это не объясняет, почему он работает на другой машине. (Я полагаю, что в ваших личных или глобальных конфигурационных файлах (~/.zshrc или /etc/zsh/) есть и другие настройки, реже проблема с версией.)

[С этой довольно простой проверкой орфографии тесно связана особенность системы завершения, называемая "приблизительное завершение". Система завершения zsh очень продвинута и заслуживает отдельного изучения.(*) Поскольку я сам не использую это "приблизительное завершение", я хочу направить вас к man zshcompsys , раздел "ФУНКЦИИ УПРАВЛЕНИЯ" _approximate . если ты заинтересован.]

Но, если у вас нет особых причин для этого, я бы использовал unsetopt correctall && setopt correct чтобы избавиться от описанного поведения (это последний пункт, предложенный Франциско), и использовал бы приличную функцию завершения для `bundle (это мой последний комментарий).

С помощью функций завершения Zsh становится достаточно "умным". Например, он знает, что после sudo должна следовать команда, поэтому sudo pass TAB завершит работу с sudo passwd . Вы используете bundle , для которого также есть функция завершения, но она явно не поставляется по умолчанию.(**) С этим вы получите приятное напоминание о возможностях пакета:

$ 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
...

и после ввода bundle exec вы получите только команды. Я предпочитаю это поведение гораздо больше, чем исправление, но это зависит от вас.


(*) Активируется autoload -U compinit && compinit . Чтобы проверить, активен ли он (возможно, так и есть), используйте which compinit:

$ zsh -f

$ which compinit
compinit not found

$ autoload -U compinit

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

(**) Скопируйте https://github.com/zsh-users/zsh-completions/blob/master/src/_bundle в каталог, который находится в вашем $fpath

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .