1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
" rails.vim - Detect a rails application
" Author: Tim Pope <http://tpo.pe/>
" GetLatestVimScripts: 1567 1 :AutoInstall: rails.vim
" Install this file as plugin/rails.vim.
if exists('g:loaded_rails') || &cp || v:version < 700
finish
endif
let g:loaded_rails = 1
" Utility Functions {{{1
function! s:error(str)
echohl ErrorMsg
echomsg a:str
echohl None
let v:errmsg = a:str
endfunction
" }}}1
" Detection {{{1
function! RailsDetect(...) abort
if exists('b:rails_root')
return 1
endif
let fn = fnamemodify(a:0 ? a:1 : expand('%'), ':p')
if fn =~# ':[\/]\{2\}'
return 0
endif
if !isdirectory(fn)
let fn = fnamemodify(fn, ':h')
endif
let file = findfile('config/environment.rb', escape(fn, ', ').';')
if !empty(file) && isdirectory(fnamemodify(file, ':p:h:h') . '/app')
let b:rails_root = fnamemodify(file, ':p:h:h')
return 1
endif
endfunction
function! s:log_detect() abort
let path = matchstr(get(w:, 'quickfix_title'), '\<cgetfile \zs.*\ze[\\/]log[\\/].*.log$')
if !empty(path) && filereadable(path . '/config/environment.rb') && isdirectory(path . '/app')
let b:rails_root = path
setlocal filetype=railslog
endif
endfunction
" }}}1
" Initialization {{{1
if !exists('g:did_load_ftplugin')
filetype plugin on
endif
if !exists('g:loaded_projectionist')
runtime! plugin/projectionist.vim
endif
function! s:doau_user(arg) abort
if exists('#User#'.a:arg)
try
let [modelines, &modelines] = [&modelines, 0]
exe 'doautocmd User' a:arg
finally
let &modelines = modelines
endtry
endif
endfunction
augroup railsPluginDetect
autocmd!
autocmd BufEnter * if exists("b:rails_root")|call s:doau_user('BufEnterRails')|endif
autocmd BufLeave * if exists("b:rails_root")|call s:doau_user('BufLeaveRails')|endif
autocmd BufNewFile,BufReadPost *
\ if RailsDetect(expand("<afile>:p")) && empty(&filetype) |
\ call rails#buffer_setup() |
\ endif
autocmd VimEnter *
\ if empty(expand("<amatch>")) && RailsDetect(getcwd()) |
\ call rails#buffer_setup() |
\ call s:doau_user('BufEnterRails') |
\ endif
autocmd FileType netrw
\ if RailsDetect() |
\ call s:doau_user('BufEnterRails') |
\ endif
autocmd FileType * if RailsDetect() | call rails#buffer_setup() | endif
autocmd BufNewFile,BufReadPost *.yml,*.yml.example
\ if &filetype !=# 'eruby.yaml' && RailsDetect() |
\ set filetype=eruby.yaml |
\ endif
autocmd BufNewFile,BufReadPost *.rjs,*.rxml,*.builder,*.jbuilder,*.ruby
\ if &filetype !=# 'ruby' | set filetype=ruby | endif
autocmd BufReadPost *.log if RailsDetect() | set filetype=railslog | endif
autocmd FileType qf call s:log_detect()
autocmd FileType railslog call rails#log_setup()
autocmd Syntax railslog call rails#log_syntax()
autocmd Syntax ruby,eruby,haml,javascript,coffee,css,sass,scss
\ if RailsDetect() | call rails#buffer_syntax() | endif
autocmd User ProjectionistDetect
\ if RailsDetect(get(g:, 'projectionist_file', '')) |
\ call projectionist#append(b:rails_root,
\ {'*': {"start": rails#app().static_rails_command('server')}}) |
\ endif
augroup END
command! -bang -bar -nargs=* -count -complete=customlist,rails#complete_rails Rails execute rails#command(<bang>0, '<mods>', !<count> && <line1> ? -1 : <count>, <q-args>)
" }}}1
" db.vim support {{{1
call extend(g:, {'db_adapters': {}}, 'keep')
call extend(g:db_adapters, {
\ 'oracle-enhanced': 'oracle',
\ 'mysql2': 'mysql',
\ 'sqlite3': 'sqlite'}, 'keep')
let g:db_adapter_rails = 'rails#db_'
" }}}1
" abolish.vim support {{{1
function! s:function(name)
return function(substitute(a:name,'^s:',matchstr(expand('<sfile>'), '<SNR>\d\+_'),''))
endfunction
augroup railsPluginAbolish
autocmd!
autocmd VimEnter * call s:abolish_setup()
augroup END
function! s:abolish_setup()
if exists('g:Abolish') && has_key(g:Abolish,'Coercions')
if !has_key(g:Abolish.Coercions,'l')
let g:Abolish.Coercions.l = s:function('s:abolish_l')
endif
if !has_key(g:Abolish.Coercions,'t')
let g:Abolish.Coercions.t = s:function('s:abolish_t')
endif
endif
endfunction
function! s:abolish_l(word)
let singular = rails#singularize(a:word)
return a:word ==? singular ? rails#pluralize(a:word) : singular
endfunction
function! s:abolish_t(word)
if a:word =~# '\u'
return rails#pluralize(rails#underscore(a:word))
else
return rails#singularize(rails#camelize(a:word))
endif
endfunction
" }}}1
" vim:set sw=2 sts=2:
|