我最近克隆了rails.vim(即vim-rails),希望修改它使其适用于Padrino项目。
目前,我正在尝试让Rcontroller
命令不仅在app/controllers中查找(很适合Rails),而且还可以在项目中任何具有名为“controllers”的子文件夹的文件夹中查找。因此,当我在命令模式下输入Rcontroller并按Tab键时,我应该能够浏览admin/controllers/base.rb
、admin/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
有人有什么建议吗?先谢谢了。