黑客rails.vim与Padrino合作

时间:2011-04-20 12:05:09

标签: ruby vim padrino

我最近克隆了rails.vim(vim-rails)希望修改它以使用Padrino项目。

目前我正在尝试让Rcontroller命令不仅可以查看应用程序/控制器(适用于rails),还可以查看项目中具有名为“controllers”的子文件夹的任何文件夹。因此,当我在命令模式和命中选项卡中键入Rcontroller时,我应该能够通过admin/controllers/base.rbadmin/controllers/accounts.rbapp/controllers/events.rb等进行制表。这样可以让插件的用户跳转到控制器在Padrino应用程序的'subapp'中。例如PADRINO_ROOT/admin

当前controllerList函数似乎处理了这个自动完成,这是我到目前为止所做的(仅从原始源稍微修改)

function! s:controllerList(A,L,P)
  let con = padrino#app().relglob("*/controllers/","**/*",".rb") 
  call map(con,'s:sub(v:val,"_controller$","")')
  return s:autocamelize(con,a:A)  
endfunction

我在控制器目录之前添加了通配符,但这会产生类似

的结果
  • Rcontroller ers/base
  • Rcontroller ers/sessions
  • Rcontroller s/events

对于最后一个,看起来有些奇怪的事情发生在字符串长度或重叠......

理想情况下,我希望能够将Rcontroller admin<TAB>输入到Rcontroller admin/controllers/accounts.rb进行自动填充。同样,Rcontroller app<TAB>应该会产生Rcontroller app/controllers/events.rb

viewList函数的代码与此类似,其代码如下:

 function! s:viewList(A,L,P)
   let c = s:controller(1)
   let top = padrino#app().relglob("app/views/",s:fuzzyglob(a:A))
   call filter(top,'v:val !~# "\\~$"')
   if c != '' && a:A !~ '/'
     let local = padrino#app().relglob("app/views/".c."/","*.*[^~]")
     return s:completion_filter(local+top,a:A)
   endif
   return s:completion_filter(top,a:A)
 endfunction

有人有什么建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

您可能希望完整路径如下所示:

**/controllers/**/*.rb

其中包含“在任何目录下查找名为controllers的目录,然后在其下的任何位置查找以.rb结尾的文件”

看看“relglob”的其他用法,我只能猜测它应该如何工作,但我的猜测是:

  • 第一个参数是“开始查看的目录”
  • 第二个参数是“如何从那里多出目录”
  • 第三个参数是“匹配的实际文件”

基于这个假设,我的猜测是使用:

padrino#app().relglob("app/","**/controllers/**/*",".rb") 

警告:这是基于我对glob的理解,而不是vim或relglob 根据实际使用情况调整。

注意:已添加“app /”,假设您不太可能想要通过vendor / plugin或vendor / gems下的任何控制器进行制表。情况可能并非如此,在这种情况下,请随意将其更改为“。”