Недавно я клонировал rails.vim(vim-rails), надеясь изменить его для работы с проектами Padrino.
В настоящее время я пытаюсь заставить команду Rcontroller
искать не только в приложениях/контроллерах (идеально подходит для рельсов), но и в любой папке проекта, которая имеет подпапку под названием "контроллеры". Поэтому, когда я набираю Rcontroller в командном режиме и нажимаю вкладку, я должен иметь возможность переходить через admin/controllers/base.rb
, admin/controllers/accounts.rb
, app/controllers/events.rb
и т.д. Это позволит пользователям плагина перейти к контроллерам в "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
У кого-нибудь есть предложения? Спасибо заранее.