我最近克隆了rails.vim(vim-rails)希望修改它以使用Padrino项目。
目前我正在尝试让Rcontroller
命令不仅可以查看应用程序/控制器(适用于rails),还可以查看项目中具有名为“controllers”的子文件夹的任何文件夹。因此,当我在命令模式和命中选项卡中键入Rcontroller时,我应该能够通过admin/controllers/base.rb
,admin/controllers/accounts.rb
,app/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
有人有什么建议吗?提前谢谢。
答案 0 :(得分:1)
您可能希望完整路径如下所示:
**/controllers/**/*.rb
其中包含“在任何目录下查找名为controllers的目录,然后在其下的任何位置查找以.rb结尾的文件”
看看“relglob”的其他用法,我只能猜测它应该如何工作,但我的猜测是:
基于这个假设,我的猜测是使用:
padrino#app().relglob("app/","**/controllers/**/*",".rb")
警告:这是基于我对glob的理解,而不是vim或relglob 根据实际使用情况调整。
注意:已添加“app /”,假设您不太可能想要通过vendor / plugin或vendor / gems下的任何控制器进行制表。情况可能并非如此,在这种情况下,请随意将其更改为“。”