Взлом rails.vim для работы с Падрино - PullRequest
16 голосов
/ 20 апреля 2011

Я недавно клонировал rails.vim (vim-rails) в надежде изменить его для работы с проектами Padrino.

В настоящее время я пытаюсь заставить команду Rcontroller искать не только в приложениях / контроллерах (идеально подходит для rails), но также и в любой папке в проекте, которая имеет подпапку, называемую «контроллеры».Поэтому, когда я набираю Rcontroller в командном режиме и нажимаю на вкладку, у меня появляется возможность переключаться между 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

У любого есть какие-либо предложения?Заранее спасибо.

1 Ответ

1 голос
/ 31 мая 2011

Возможно, вы хотите, чтобы полный путь выглядел так:

**/controllers/**/*.rb

, который выглядит как «искать в любом каталоге каталог, называемый контроллерами, а затем искать в любом месте этого файла файл, заканчивающийся на .rb»

Глядя на другие случаи использования "relglob", я могу только догадываться, как он должен работать, но я думаю:

  • первый параметр - "какой каталог начать искать"
  • Второй параметр: «Как оттуда умножить каталоги»
  • третий параметр - «фактические файлы, которые будут соответствовать»

исходя из этого предположения, я бы предположил использовать:

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

Предостережение: это основано на моем понимании glob, а не vim или relglob настроить в соответствии с фактическим использованием.

Примечание: добавили «app /» в предположении, что вам вряд ли захочется перелистывать какие-либо контроллеры в vendor / plugin или vendor / gems. Это может быть не так, и в этом случае не стесняйтесь изменить его на "."

...