使用zsh在rake中添加文件自动完成


3

我已经oh-my-zsh安装了rails插件,当我使用zsh完成时rake,它完成了任务列表rake -T

当我运行特定测试时,其中一个参数是测试文件的路径:

rake test test/models/dummy_model.rb

我经常尝试自动完成这条路径,但显然不起作用。

rake test test/models/...

除了任务之外,我希望能够从文件路径完成。我怎么能这样做?

Answers:


3

如果我说得对,那么只有在您使用表单时才会出现这种情况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目标返回。


太棒了!非常感谢你,它完美无缺。为了记录,在OS X Yosemite上,文件路径是/usr/share/zsh/5.0.5/functions/_rake/usr/share/zsh/5.0.2/functions/_rake在OS X Mavericks上)
ybart 2014年

这应该在官方完成文件中。你为什么不提交补丁?
Pablo Olmos de Aguilera C.

目前尚未通过SourceForge票务工具接受补丁。shell由各种(完全自我指定的)邮件列表订阅者zsh-workers@zsh.org维护,因此有关shell开发的任何问题(错误报告,建议,投诉......)的邮件应该是被送到那里。如果您希望有人直接向您发送邮件,请说明。zsh的大多数补丁首先出现在那里。
Pablo Olmos de Aguilera C.

@pablox请随时将此补丁提交给zsh-workers。我自己并没有这样做,因为我不知道rake,因此无法判断它是否只针对特殊情况或一般意义上的问题。
2015年

我将继续使用几天,但直到现在它似乎没关系:)。你是如何学习zsh完成的?
Pablo Olmos de Aguilera C.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.