将rails.vim修改以与Padrino一起使用的黑客技巧

16

我最近克隆了rails.vim(即vim-rails),希望修改它使其适用于Padrino项目。

目前,我正在尝试让Rcontroller命令不仅在app/controllers中查找(很适合Rails),而且还可以在项目中任何具有名为“controllers”的子文件夹的文件夹中查找。因此,当我在命令模式下输入Rcontroller并按Tab键时,我应该能够浏览admin/controllers/base.rbadmin/controllers/accounts.rbapp/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

有人有什么建议吗?先谢谢了。


3
你也检查过这个了吗?https://github.com/gerardc/vim-padrino - 它还不够成熟,但(可能)有所帮助... - clt60
5
那其实是我制作的rails.vim副本! :) - gcahill
你好...你还在吗? :) - Taryn East
这实际上是我的rails.vim克隆!-- 如此元 :) - aaandre
@gcahill - 我的答案有帮助您解决问题吗?如果有的话 - 您可以接受我的答案吗? :) 这还将有助于提高您的接受率 ;) - Taryn East
1个回答

1

你可能希望完整路径看起来像这样:

**/controllers/**/*.rb

glob作为“在任何目录下查找名为controllers的目录,然后在其中任何地方查找以.rb结尾的文件”。

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

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

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

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

注意:这是基于我的glob理解,而不是vim或relglob的实际用法。请根据实际情况进行调整。
注意:在假设中添加了“app/”,因为您不太可能希望在vendor/plugin或vendor/gems下浏览任何控制器。如果不是这种情况,请随意将其更改为“.”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接