3

У меня установлен oh-my-zsh с плагином rails , когда я использую zsh завершение с помощью rake , он завершается списком задач из rake -T .

Когда я запускаю конкретный тест, одним из параметров является путь к файлу теста:

rake test test/models/dummy_model.rb

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

rake test test/models/...

Я хотел бы иметь возможность выполнять из файловых путей в дополнение к задачам. Как я мог это сделать?

1 ответ1

3

Если я вас правильно понял, это происходит только тогда, когда вы используете тест rake формы rake test ... Тогда вы можете использовать этот патч против $fpath/_rake

diff --git a/Completion/Unix/Command/_rake b/Completion/Unix/Command/_rake
index 7fed949..96ee930 100644
--- a/Completion/Unix/Command/_rake
+++ b/Completion/Unix/Command/_rake
@@ -37,12 +37,16 @@ case "$state" in
   ;;
   target)
     local -a targets
-    targets=( ${${(f)"$(_call_program targets $words[1] -sT $opt_args[(I)(-N|--nosearch)] ${(kv)opt_args[(I)(-f|--rakefile)]} 2>/dev/null)"}/(#b)rake ([^ ]##) ##\# (*)/${${match[1]}//:/\\:}:${match[2]:l}} )
-    if (( ! ${targets[(I)rake aborted!]} )) then
-      _describe -t targets 'rake target' targets && ret=0
-    else
-      _message -e targets 'rake target'
-    fi
+    if [[ $words[$((CURRENT-1))] == "test" ]]; then
+       _files && ret=0
+       else
+           targets=( ${${(f)"$(_call_program targets $words[1] -sT $opt_args[(I)(-N|--nosearch)] ${(kv)opt_args[(I)(-f|--rakefile)]} 2>/dev/null)"}/(#b)rake ([^ ]##) ##\# (*)/${${match[1]}//:/\\:}:${match[2]:l}} )
+           if (( ! ${targets[(I)rake aborted!]} )) then
+             _describe -t targets 'rake target' targets && ret=0
+           else
+             _message -e targets 'rake target'
+           fi
+       fi
   ;;
 esac

Этот патч в принципе добавляет условие if [[ $words[$((CURRENT-1))] == "test" ]]; который проверяет, равен ли предыдущий аргумент "test". И если это так, файлы и каталоги возвращаются через функцию _files вместо целей rake.

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