我最近克隆了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
Run Code Online (Sandbox Code Playgroud)
我在控制器目录之前添加了通配符,但这给出了结果
Rcontroller ers/baseRcontroller ers/sessionsRcontroller 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
Run Code Online (Sandbox Code Playgroud)
有人有什么建议吗?提前致谢.
您可能希望完整路径如下所示:
**/controllers/**/*.rb
Run Code Online (Sandbox Code Playgroud)
其通配符为“在任何目录下查找名为controllers的目录,然后在该目录下的任何位置查找以.rb结尾的文件”
看看“relglob”的其他用法,我只能猜测它应该如何工作,但我的猜测是:
基于这个假设,我的猜测是使用:
padrino#app().relglob("app/","**/controllers/**/*",".rb")
Run Code Online (Sandbox Code Playgroud)
注意:这是基于我对 glob 的理解,而不是根据实际使用调整 vim 或 relglob 的理解。
注意:添加“app/”是假设您不太可能希望通过供应商/插件或供应商/gems 下的任何控制器进行 Tab 键切换。情况可能并非如此,在这种情况下,请随意将其更改为“。”
| 归档时间: |
|
| 查看次数: |
542 次 |
| 最近记录: |