Find Rails partial references in Vim

Before I change a Rails partial that’s shared across the project, I check what effect my change will have by looking at where and how the partial’s used. In Vim, I find the references to partials with the following function:

function! GrepPartial(partial)
  if (a:partial)
    let pattern = "partial.*" . partial
  else
    let path = substitute(expand("%:h"), "app/views/", "", "")
    let action = substitute(expand("%:t:r:r"), "^_", "", "")
    let pattern = "partial.*" . path . "/" . action
  endif

  if (exists('g:loaded_fugitive'))
    execute "Ggrep -P " . '"' . pattern . '\b" app/views'
  elseif (exists('g:ackprg'))
    execute "Ack " . '"' . pattern . '\b" app/views'
  else
    " seriously? use git grep or ack!
    execute "vimgrep " . '"' . pattern . '\>" app/views/*/**'
  endif
endfunction
command! -nargs=? GrepPartial
      \ call GrepPartial(<q-args>)

Here’s how the command works:

  • :GrepPartial finds references to the current partial you’re editing.
  • :GrepPartial accounts/show find references to the accounts/show partial.

This function doesn’t depend on any plugins. But if you’ve installed Fugitive or the Ack plugins, then the function uses them.