zsh пропонує виправити виконуваний файл під час запуску пакету exec


3

Чому zsh просить виправити rspec на spec при запуску пакета?

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

система:

  • ubuntu 12.10
  • використовуючи rvm

як це виправити? Дякую!

ОНОВЛЕННЯ:

натискання 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)

і це не мало ефекту. Помилка зберігається (я відкриваю нову вкладку терміналу кожен раз)


1
Цікавою є те, що zsh не виправить rspecсамостійно. Тож я підозрюю, що в другому прикладі передбачається, що це rspecмає бути варіант або щось для команди bundle, що означає, що завершувач пакету повинен бути посилений. У мене немає bundle, тож чи можете ви розмістити висновок наступної процедури: введення bundle exec та натискання C-x h?
mpy

@mpy оновив мою відповідь. це вам допомагає? Як FYI, exec пакетної розробки призначений для вирішення проблеми декількох встановлених виконуваних файлів. Один проект може використовувати rspec 1.10, інший rspec 2.12.2. пакет зчитує локальний Gemfile проекту, щоб побачити версію та виконати правильний виконуваний файл rspec. Отже, rspec - це програма, а не просто параметр. У мене немає проблеми на моєму Mac, що працює з zsh, тільки в цій установці ubuntu.
ома

Так, допомагає, оскільки це показує, що zsh не знає, що після того, bundle execяк команда повинна бути видана. Але це, мабуть, простіше, ніж я думав (бо я змішав "виправлення" з "приблизним завершенням"), тим більше, що ти пишеш, що це працює на іншій машині. Тому будь ласка, спробуйте, чи є різниця між обома машинами для [[ -o correctall ]] && echo enabled. correctallтакож намагається виправити будь-які аргументи як файли. У вас є файл specу поточному режимі?
mpy

Щоб отримати функцію завершення bundle, перегляньте сторінку github.com/zsh-users/zsh-completions/blob/master/src/_bundle . Просто поставте це в /usr/share/zsh/site-functionsіншу папку з включеною в $fpath- так як здається, _bundleвона не постачається з zsh за замовчуванням.
mpy

@mpy, будь ласка, дайте відповідь з цього питання, трохи детальніше (і я можу висловити позицію), я не з нетерпінням стежу за вами. До Ваших питань: 1. Коректальна опція включена в обох 2. spec- це папка, я зазвичай працюю bundle exec rspec spec.
ома

Відповіді:


4

Тому що він думає, що rspec - це неправильне написання специфікації?

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

[редагувати] Зверніть увагу, що zsh використовує функції завершення, щоб визначити, чого очікувати. У другому випадку використовується доповнювач дляbundle


ні, zsh не вважає це правописом, див. перший рядок. Однак це робиться в контексті виконання пакету. Чому? - ось питання.
ома

AFAIK zsh використовує параметри заповнення для списку правописів. У першому випадку він використовує завершальник для rspec, у другому він використовує (див. Оновлення запитань) для завершальника bundle.
Франциско

Це прекрасно працювало для мене.
Джейкоб Далтон

Це рішення, яке працювало і для мене. Якщо не знайдеться рішення, яке спеціально виділити rspecпри використанні, bundle execя думаю, що це має бути прийнятою відповіддю.
roloenusa

1

Автоматичну перевірку орфографії можна активувати двома способами (я використовую "Від башти до Z Шелл" О. Кіддла та ін. Як керівництво / довідник):

  • setopt correct

    Після натискання клавіші Enter zsh "дивиться на командне слово, і якщо не розпізнає його як команду, він намагається знайти виправлення, яке потім пропонує вам".

  • setopt correctall

    Мовляв correct, але на додачу перевіряє "аргументи після команди. Однак, вона просто припускає, що вони є файлами, і намагається виправити слова з назви файлів. Часто це не те, що потрібно ".

Отже, останнє пояснює, чому вам specпропонують як корекцію rspec- zsh вважає, що це повинен бути файл (або у вашому випадку каталог). Це не пояснює, чому він працює на іншій машині. (Я припускаю, що у ваших особистих або глобальних конфігураційних файлах ( ~/.zshrcабо /etc/zsh/) є різні налаштування , що менше версії.)

[Тісно пов'язана з цією досить простою перевіркою правопису є особливістю системи завершення, яка називається "приблизне завершення". Система завершення zsh дуже вдосконалена, варто вивчити її самостійно. (*) Оскільки я сам не використовую "приблизне завершення", я хочу направити вас man zshcompsys, розділ "ФУНКЦІЇ КОНТРОЛЮ" _approximate. якщо ти зацікавлений.]

Але, якщо у вас немає особливих причин для цього, я б скористався unsetopt correctall && setopt correctтим, щоб позбутися описаної поведінки (це останній пункт, запропонований Франциско) і використати пристойну функцію завершення `bundle '(це мій останній коментар).

За допомогою fucntions завершення zsh стає досить "розумним". Тож, наприклад, відомо, що після sudo повинна слідувати команда, отже, sudo passTABбуде завершено до 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.