neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

eruby.vim (4958B)


      1 " Vim filetype plugin
      2 " Language:		eRuby
      3 " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
      4 " URL:			https://github.com/vim-ruby/vim-ruby
      5 " Last Change:		2022 May 15
      6 "			2024 Jan 14 by Vim Project (browsefilter)
      7 "			2024 May 23 by Riley Bruins <ribru17@gmail.com> ('commentstring')
      8 
      9 " Only do this when not done yet for this buffer
     10 if exists("b:did_ftplugin")
     11  finish
     12 endif
     13 
     14 let s:save_cpo = &cpo
     15 set cpo-=C
     16 
     17 " Define some defaults in case the included ftplugins don't set them.
     18 let s:undo_ftplugin = ""
     19 if has("win32")
     20  let s:browsefilter = "All Files (*.*)\t*\n"
     21 else
     22  let s:browsefilter = "All Files (*)\t*\n"
     23 endif
     24 let s:match_words = ""
     25 
     26 if !exists("g:eruby_default_subtype")
     27  let g:eruby_default_subtype = "html"
     28 endif
     29 
     30 if &filetype =~ '^eruby\.'
     31  let b:eruby_subtype = matchstr(&filetype,'^eruby\.\zs\w\+')
     32 elseif !exists("b:eruby_subtype")
     33  let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
     34  let b:eruby_subtype = matchstr(s:lines,'eruby_subtype=\zs\w\+')
     35  if b:eruby_subtype == ''
     36    let b:eruby_subtype = matchstr(substitute(expand("%:t"),'\c\%(\.erb\|\.eruby\|\.erubis\|\.example\)\+$','',''),'\.\zs\w\+\%(\ze+\w\+\)\=$')
     37  endif
     38  if b:eruby_subtype == 'rhtml'
     39    let b:eruby_subtype = 'html'
     40  elseif b:eruby_subtype == 'rb'
     41    let b:eruby_subtype = 'ruby'
     42  elseif b:eruby_subtype == 'yml'
     43    let b:eruby_subtype = 'yaml'
     44  elseif b:eruby_subtype == 'js'
     45    let b:eruby_subtype = 'javascript'
     46  elseif b:eruby_subtype == 'txt'
     47    " Conventional; not a real file type
     48    let b:eruby_subtype = 'text'
     49  elseif b:eruby_subtype == ''
     50    let b:eruby_subtype = g:eruby_default_subtype
     51  endif
     52 endif
     53 
     54 if exists("b:eruby_subtype") && b:eruby_subtype != '' && b:eruby_subtype !=? 'eruby'
     55  exe "runtime! ftplugin/".b:eruby_subtype.".vim ftplugin/".b:eruby_subtype."_*.vim ftplugin/".b:eruby_subtype."/*.vim"
     56 else
     57  runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
     58 endif
     59 unlet! b:did_ftplugin
     60 
     61 " Override our defaults if these were set by an included ftplugin.
     62 if exists("b:undo_ftplugin")
     63  let s:undo_ftplugin = b:undo_ftplugin
     64  unlet b:undo_ftplugin
     65 endif
     66 if exists("b:browsefilter")
     67  let s:browsefilter = b:browsefilter
     68  unlet b:browsefilter
     69 endif
     70 if exists("b:match_words")
     71  let s:match_words = b:match_words
     72  unlet b:match_words
     73 endif
     74 
     75 let s:cfilemap = v:version >= 704 ? maparg('<Plug><cfile>', 'c', 0, 1) : {}
     76 if !get(s:cfilemap, 'buffer') || !s:cfilemap.expr || s:cfilemap.rhs =~# 'ErubyAtCursor()'
     77  let s:cfilemap = {}
     78 endif
     79 if !has_key(s:cfilemap, 'rhs')
     80  let s:cfilemap.rhs = "substitute(&l:inex =~# '\\<v:fname\\>' && len(expand('<cfile>')) ? eval(substitute(&l:inex, '\\<v:fname\\>', '\\=string(expand(\"<cfile>\"))', 'g')) : '', '^$', \"\\022\\006\",'')"
     81 endif
     82 let s:ctagmap = v:version >= 704 ? maparg('<Plug><ctag>', 'c', 0, 1) : {}
     83 if !get(s:ctagmap, 'buffer') || !s:ctagmap.expr || s:ctagmap.rhs =~# 'ErubyAtCursor()'
     84  let s:ctagmap = {}
     85 endif
     86 let s:include = &l:include
     87 let s:path = &l:path
     88 let s:suffixesadd = &l:suffixesadd
     89 
     90 runtime! ftplugin/ruby.vim ftplugin/ruby_*.vim ftplugin/ruby/*.vim
     91 let b:did_ftplugin = 1
     92 
     93 " Combine the new set of values with those previously included.
     94 if !exists('b:undo_ftplugin')
     95  " No-op
     96  let b:undo_ftplugin = 'exe'
     97 endif
     98 if !empty(s:undo_ftplugin)
     99  let b:undo_ftplugin .= '|' . s:undo_ftplugin
    100 endif
    101 if exists ("b:browsefilter")
    102  let s:browsefilter = substitute(b:browsefilter,'\cAll Files (\*\.\*)\t\*\.\*\n','','') . s:browsefilter
    103 endif
    104 if exists("b:match_words")
    105  let s:match_words = b:match_words . ',' . s:match_words
    106 endif
    107 
    108 if len(s:include)
    109  let &l:include = s:include
    110 endif
    111 let &l:path = s:path . (s:path =~# ',$\|^$' ? '' : ',') . &l:path
    112 let &l:suffixesadd = s:suffixesadd . (s:suffixesadd =~# ',$\|^$' ? '' : ',') . &l:suffixesadd
    113 exe 'cmap <buffer><script><expr> <Plug><cfile> ErubyAtCursor() ? ' . maparg('<Plug><cfile>', 'c') . ' : ' . s:cfilemap.rhs
    114 exe 'cmap <buffer><script><expr> <Plug><ctag> ErubyAtCursor() ? ' . maparg('<Plug><ctag>', 'c') . ' : ' . get(s:ctagmap, 'rhs', '"\022\027"')
    115 unlet s:cfilemap s:ctagmap s:include s:path s:suffixesadd
    116 
    117 " Change the browse dialog on Win32 and GTK to show mainly eRuby-related files
    118 if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
    119  let b:browsefilter="eRuby Files (*.erb, *.rhtml)\t*.erb;*.rhtml\n" . s:browsefilter
    120 endif
    121 
    122 " Load the combined list of match_words for matchit.vim
    123 if exists("loaded_matchit")
    124  let b:match_words = s:match_words
    125 endif
    126 
    127 " TODO: comments=
    128 setlocal commentstring=<%#\ %s\ %>
    129 
    130 let b:undo_ftplugin = "setl cms< " .
    131      \ " | unlet! b:browsefilter b:match_words | " . b:undo_ftplugin
    132 
    133 let &cpo = s:save_cpo
    134 unlet s:save_cpo
    135 
    136 function! ErubyAtCursor() abort
    137  let groups = map(['erubyBlock', 'erubyComment', 'erubyExpression', 'erubyOneLiner'], 'hlID(v:val)')
    138  return !empty(filter(synstack(line('.'), col('.')), 'index(groups, v:val) >= 0'))
    139 endfunction
    140 
    141 " vim: nowrap sw=2 sts=2 ts=8: