16

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

目前,我试图让Rcontroller命令不仅在应用程序/控制器(非常适合 rails)中查看,而且在项目中具有名为“控制器”的子文件夹的任何文件夹中。因此,当我在命令模式下键入 Rcontroller 并点击选项卡时,我应该能够通过admin/controllers/base.rbadmin/controllers/accounts.rb等进行选项卡app/controllers/events.rb。这将让插件的用户跳转到 Padrino 应用程序的“子应用程序”中的控制器。例如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

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

4

1 回答 1

1

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

**/controllers/**/*.rb

其中 glob 为“在任何目录下查找名为控制器的目录,然后在该目录下的任何位置查找以 .rb 结尾的文件”

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

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

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

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

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

注意:已添加“app/”,假设您不太可能希望通过供应商/插件或供应商/宝石下的任何控制器进行选项卡。这可能不是这种情况,在这种情况下,请随意将其更改为“。”

于 2011-05-31T09:05:17.593 回答