1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: Ruby 3*c6249bb2SBram Moolenaar" Maintainer: Doug Kearns <[email protected]> 46b730e11SBram Moolenaar" Info: $Id$ 5a5792f58SBram Moolenaar" URL: http://vim-ruby.rubyforge.org 66b730e11SBram Moolenaar" Anon CVS: See above site 7*c6249bb2SBram Moolenaar" Release Coordinator: Doug Kearns <[email protected]> 86b730e11SBram Moolenaar" ---------------------------------------------------------------------------- 96b730e11SBram Moolenaar" 10071d4279SBram Moolenaar" Previous Maintainer: Mirko Nasato 11071d4279SBram Moolenaar" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN) 126b730e11SBram Moolenaar" ---------------------------------------------------------------------------- 13071d4279SBram Moolenaar 14071d4279SBram Moolenaar" For version 5.x: Clear all syntax items 15071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded 16071d4279SBram Moolenaarif version < 600 17071d4279SBram Moolenaar syntax clear 18071d4279SBram Moolenaarelseif exists("b:current_syntax") 19071d4279SBram Moolenaar finish 20071d4279SBram Moolenaarendif 21071d4279SBram Moolenaar 226b730e11SBram Moolenaarif has("folding") && exists("ruby_fold") 236b730e11SBram Moolenaar setlocal foldmethod=syntax 246b730e11SBram Moolenaarendif 256b730e11SBram Moolenaar 266b730e11SBram Moolenaarif exists("ruby_space_errors") 276b730e11SBram Moolenaar if !exists("ruby_no_trail_space_error") 286b730e11SBram Moolenaar syn match rubySpaceError display excludenl "\s\+$" 296b730e11SBram Moolenaar endif 306b730e11SBram Moolenaar if !exists("ruby_no_tab_space_error") 316b730e11SBram Moolenaar syn match rubySpaceError display " \+\t"me=e-1 326b730e11SBram Moolenaar endif 336b730e11SBram Moolenaarendif 346b730e11SBram Moolenaar 35071d4279SBram Moolenaar" Expression Substitution and Backslash Notation 366b730e11SBram Moolenaarsyn match rubyEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display 376b730e11SBram Moolenaarsyn match rubyEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display 386b730e11SBram Moolenaarsyn match rubyInterpolation "#{[^}]*}" contained 396b730e11SBram Moolenaarsyn match rubyInterpolation "#\%(\$\|@@\=\)\w\+" contained display 406b730e11SBram Moolenaarsyn match rubyNoInterpolation "\\#{[^}]*}" contained 416b730e11SBram Moolenaarsyn match rubyNoInterpolation "\\#\%(\$\|@@\=\)\w\+" contained display 426b730e11SBram Moolenaar 436b730e11SBram Moolenaarsyn match rubyDelimEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE 446b730e11SBram Moolenaar 456b730e11SBram Moolenaarsyn region rubyNestedParentheses start="(" end=")" skip="\\\\\|\\)" transparent contained contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape 466b730e11SBram Moolenaarsyn region rubyNestedCurlyBraces start="{" end="}" skip="\\\\\|\\}" transparent contained contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape 476b730e11SBram Moolenaarsyn region rubyNestedAngleBrackets start="<" end=">" skip="\\\\\|\\>" transparent contained contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape 486b730e11SBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" end="\]" skip="\\\\\|\\\]" transparent contained contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape 496b730e11SBram Moolenaar 506b730e11SBram Moolenaarsyn cluster rubyStringSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyEscape 516b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets 52071d4279SBram Moolenaar 53071d4279SBram Moolenaar" Numbers and ASCII Codes 546b730e11SBram Moolenaarsyn match rubyASCIICode "\w\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)" 556b730e11SBram Moolenaarsyn match rubyInteger "\<0[xX]\x\+\%(_\x\+\)*\>" display 566b730e11SBram Moolenaarsyn match rubyInteger "\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>" display 576b730e11SBram Moolenaarsyn match rubyInteger "\<0[oO]\=\o\+\%(_\o\+\)*\>" display 586b730e11SBram Moolenaarsyn match rubyInteger "\<0[bB][01]\+\%(_[01]\+\)*\>" display 596b730e11SBram Moolenaarsyn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>" display 606b730e11SBram Moolenaarsyn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>" display 61071d4279SBram Moolenaar 626b730e11SBram Moolenaar" Identifiers 636b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent 646b730e11SBram Moolenaarsyn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent 65071d4279SBram Moolenaar 666b730e11SBram Moolenaarsyn match rubyConstant "\%(\%(\.\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\>\%(\s*(\)\@!" 676b730e11SBram Moolenaarsyn match rubyClassVariable "@@\h\w*" display 686b730e11SBram Moolenaarsyn match rubyInstanceVariable "@\h\w*" display 696b730e11SBram Moolenaarsyn match rubyGlobalVariable "$\%(\h\w*\|-.\)" 706b730e11SBram Moolenaarsyn match rubySymbol ":\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" 716b730e11SBram Moolenaarsyn match rubySymbol ":\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" 726b730e11SBram Moolenaarsyn match rubySymbol ":\@<!:\%(\$\|@@\=\)\=\h\w*[?!=]\=" 736b730e11SBram Moolenaarsyn region rubySymbol start=":\@<!:\"" end="\"" skip="\\\\\|\\\"" 746b730e11SBram Moolenaarsyn match rubyBlockParameter "\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display 75071d4279SBram Moolenaar 766b730e11SBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]# 776b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>" display 786b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display 796b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display 801e015460SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display 816b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!" 826b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!" 836b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!" 84071d4279SBram Moolenaar"Obsolete Global Constants 856b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>" 866b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>" 87071d4279SBram Moolenaar 88071d4279SBram Moolenaar" Normal Regular Expression 89d5cdbeb8SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial 906b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\<\%(split\|scan\|gsub\|sub\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial 916b730e11SBram Moolenaar 926b730e11SBram Moolenaar" Normal String and Shell Command Output 936b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial 946b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="'" end="'" skip="\\\\\|\\'" 956b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial 966b730e11SBram Moolenaar 976b730e11SBram Moolenaar" Generalized Regular Expression 986b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomx]*" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 996b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r{" end="}[iomx]*" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold 1006b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r<" end=">[iomx]*" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold 1016b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\[" end="\][iomx]*" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold 1026b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r(" end=")[iomx]*" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold 1036b730e11SBram Moolenaar 1046b730e11SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings 1056b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold 1066b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimEscape 1076b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimEscape 1086b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimEscape 1096b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimEscape 1106b730e11SBram Moolenaar 1116b730e11SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output 1126b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string 1136b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 1146b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 1156b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold 1166b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold 1176b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold 1186b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold 119071d4279SBram Moolenaar 120071d4279SBram Moolenaar" Here Document 1216b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs\%(\h\w*\)+ end=+$+ oneline contains=TOP 1226b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=TOP 1236b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=TOP 1246b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=TOP 125071d4279SBram Moolenaar 1266b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<\z(\h\w*\)\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend 1276b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<"\z([^"]*\)"\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend 1286b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<'\z([^']*\)'\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart nextgroup=rubyFunction fold keepend 1296b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<`\z([^`]*\)`\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend 1306b730e11SBram Moolenaar 1316b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\z(\h\w*\)\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend 1326b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend 1336b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-'\z([^']*\)'\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart nextgroup=rubyFunction fold keepend 1346b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend 1356b730e11SBram Moolenaar 1366b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby' 137d5cdbeb8SBram Moolenaar let b:ruby_no_expensive = 1 1386b730e11SBram Moolenaarend 139071d4279SBram Moolenaar 140071d4279SBram Moolenaar" Expensive Mode - colorize *end* according to opening statement 141d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive") 142d5cdbeb8SBram Moolenaar syn region rubyFunction matchgroup=rubyDefine start="\<def\s\+" end="\%(\s*\%(\s\|(\|;\|$\|#\)\)\@=" oneline 143d5cdbeb8SBram Moolenaar syn region rubyClass matchgroup=rubyDefine start="\<class\s\+" end="\%(\s*\%(\s\|<\|;\|$\|#\)\)\@=" oneline 1446b730e11SBram Moolenaar syn match rubyDefine "\<class\ze<<" 145d5cdbeb8SBram Moolenaar syn region rubyModule matchgroup=rubyDefine start="\<module\s\+" end="\%(\s*\%(\s\|;\|$\|#\)\)\@=" oneline 146071d4279SBram Moolenaar 1476b730e11SBram Moolenaar syn region rubyBlock start="\<def\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyFunction fold 1486b730e11SBram Moolenaar syn region rubyBlock start="\<class\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyClass fold 1496b730e11SBram Moolenaar syn region rubyBlock start="\<module\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyModule fold 150071d4279SBram Moolenaar 1516b730e11SBram Moolenaar " modifiers 1526b730e11SBram Moolenaar syn match rubyControl "\<\%(if\|unless\|while\|until\)\>" display 153071d4279SBram Moolenaar 154071d4279SBram Moolenaar " *do* requiring *end* 1556b730e11SBram Moolenaar syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold 156071d4279SBram Moolenaar 157071d4279SBram Moolenaar " *{* requiring *}* 1586b730e11SBram Moolenaar syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold 159071d4279SBram Moolenaar 160071d4279SBram Moolenaar " statements without *do* 1616b730e11SBram Moolenaar syn region rubyNoDoBlock matchgroup=rubyControl start="\<\%(case\|begin\)\>" start="\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\zs\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold 162071d4279SBram Moolenaar 163071d4279SBram Moolenaar " statement with optional *do* 1641e015460SBram Moolenaar syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[?:,;=([<>~\*/%!&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo 1651e015460SBram Moolenaar syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyControl end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyOptDoLine fold 166071d4279SBram Moolenaar 167071d4279SBram Moolenaar if !exists("ruby_minlines") 168071d4279SBram Moolenaar let ruby_minlines = 50 169071d4279SBram Moolenaar endif 170071d4279SBram Moolenaar exec "syn sync minlines=" . ruby_minlines 171071d4279SBram Moolenaar 1726b730e11SBram Moolenaarelse 1736b730e11SBram Moolenaar syn region rubyFunction matchgroup=rubyControl start="\<def\s\+" end="\ze\%(\s\|(\|;\|$\)" oneline 1746b730e11SBram Moolenaar syn region rubyClass matchgroup=rubyControl start="\<class\s\+" end="\ze\%(\s\|<\|;\|$\)" oneline 1756b730e11SBram Moolenaar syn match rubyControl "\<class\ze<<" 1766b730e11SBram Moolenaar syn region rubyModule matchgroup=rubyControl start="\<module\s\+" end="\ze\%(\s\|;\|$\)" oneline 177071d4279SBram Moolenaar syn keyword rubyControl case begin do for if unless while until end 1786b730e11SBram Moolenaarendif 179071d4279SBram Moolenaar 180071d4279SBram Moolenaar" Keywords 1816b730e11SBram Moolenaar" Note: the following keywords have already been defined: 1826b730e11SBram Moolenaar" begin case class def do end for if module unless until while 1836b730e11SBram Moolenaarsyn keyword rubyControl and break else elsif ensure in next not or redo rescue retry return then when 1846b730e11SBram Moolenaarsyn match rubyOperator "\<defined?" display 1856b730e11SBram Moolenaarsyn keyword rubyKeyword alias super undef yield 1866b730e11SBram Moolenaarsyn keyword rubyBoolean true false 1876b730e11SBram Moolenaarsyn keyword rubyPseudoVariable nil self __FILE__ __LINE__ 188071d4279SBram Moolenaarsyn keyword rubyBeginEnd BEGIN END 189071d4279SBram Moolenaar 1906b730e11SBram Moolenaar" Special Methods 1916b730e11SBram Moolenaarif !exists("ruby_no_special_methods") 1926b730e11SBram Moolenaar syn keyword rubyAccess public protected private 1936b730e11SBram Moolenaar syn keyword rubyAttribute attr attr_accessor attr_reader attr_writer 1941e015460SBram Moolenaar syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>\)" 1956b730e11SBram Moolenaar syn keyword rubyEval eval class_eval instance_eval module_eval 1966b730e11SBram Moolenaar syn keyword rubyException raise fail catch throw 1976b730e11SBram Moolenaar syn keyword rubyInclude autoload extend include load require 1986b730e11SBram Moolenaar syn keyword rubyKeyword callcc caller lambda proc 199071d4279SBram Moolenaarendif 200071d4279SBram Moolenaar 2016b730e11SBram Moolenaar" Comments and Documentation 2026b730e11SBram Moolenaarsyn match rubySharpBang "\%^#!.*" display 2036b730e11SBram Moolenaarsyn keyword rubyTodo FIXME NOTE TODO XXX contained 2046b730e11SBram Moolenaarsyn match rubyComment "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell 2056b730e11SBram Moolenaarsyn region rubyDocumentation start="^=begin" end="^=end.*$" contains=rubySpaceError,rubyTodo,@Spell fold 2066b730e11SBram Moolenaar 2076b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver 2086b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>" transparent contains=NONE 2096b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>" transparent contains=NONE 2106b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>" transparent contains=NONE 2116b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>" transparent contains=NONE 2126b730e11SBram Moolenaar 2136b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>" transparent contains=NONE 2146b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>" transparent contains=NONE 2156b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE 2166b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>" transparent contains=NONE 2176b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>" transparent contains=NONE 2186b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>" transparent contains=NONE 219071d4279SBram Moolenaar 220071d4279SBram Moolenaar" __END__ Directive 2216b730e11SBram Moolenaarsyn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold 222071d4279SBram Moolenaar 223071d4279SBram Moolenaar" Define the default highlighting. 224071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already 225071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet 226071d4279SBram Moolenaarif version >= 508 || !exists("did_ruby_syntax_inits") 227071d4279SBram Moolenaar if version < 508 228071d4279SBram Moolenaar let did_ruby_syntax_inits = 1 229071d4279SBram Moolenaar command -nargs=+ HiLink hi link <args> 230071d4279SBram Moolenaar else 231071d4279SBram Moolenaar command -nargs=+ HiLink hi def link <args> 232071d4279SBram Moolenaar endif 233071d4279SBram Moolenaar 234071d4279SBram Moolenaar HiLink rubyDefine Define 235071d4279SBram Moolenaar HiLink rubyFunction Function 236071d4279SBram Moolenaar HiLink rubyControl Statement 237071d4279SBram Moolenaar HiLink rubyInclude Include 2386b730e11SBram Moolenaar HiLink rubyInteger Number 2396b730e11SBram Moolenaar HiLink rubyASCIICode rubyInteger 2406b730e11SBram Moolenaar HiLink rubyFloat Float 2416b730e11SBram Moolenaar HiLink rubyBoolean rubyPseudoVariable 242071d4279SBram Moolenaar HiLink rubyException Exception 2436b730e11SBram Moolenaar HiLink rubyClass Type 2446b730e11SBram Moolenaar HiLink rubyModule Type 2456b730e11SBram Moolenaar if !exists("ruby_no_identifiers") 246071d4279SBram Moolenaar HiLink rubyIdentifier Identifier 2476b730e11SBram Moolenaar else 2486b730e11SBram Moolenaar HiLink rubyIdentifier NONE 2496b730e11SBram Moolenaar endif 250071d4279SBram Moolenaar HiLink rubyClassVariable rubyIdentifier 251071d4279SBram Moolenaar HiLink rubyConstant rubyIdentifier 252071d4279SBram Moolenaar HiLink rubyGlobalVariable rubyIdentifier 2536b730e11SBram Moolenaar HiLink rubyBlockParameter rubyIdentifier 254071d4279SBram Moolenaar HiLink rubyInstanceVariable rubyIdentifier 255071d4279SBram Moolenaar HiLink rubyPredefinedIdentifier rubyIdentifier 256071d4279SBram Moolenaar HiLink rubyPredefinedConstant rubyPredefinedIdentifier 257071d4279SBram Moolenaar HiLink rubyPredefinedVariable rubyPredefinedIdentifier 258071d4279SBram Moolenaar HiLink rubySymbol rubyIdentifier 259071d4279SBram Moolenaar HiLink rubyKeyword Keyword 2606b730e11SBram Moolenaar HiLink rubyOperator Operator 261071d4279SBram Moolenaar HiLink rubyBeginEnd Statement 2626b730e11SBram Moolenaar HiLink rubyAccess Statement 2636b730e11SBram Moolenaar HiLink rubyAttribute Statement 2646b730e11SBram Moolenaar HiLink rubyEval Statement 2656b730e11SBram Moolenaar HiLink rubyPseudoVariable Constant 266071d4279SBram Moolenaar 267071d4279SBram Moolenaar HiLink rubyComment Comment 268071d4279SBram Moolenaar HiLink rubyData Comment 269071d4279SBram Moolenaar HiLink rubyDataDirective Delimiter 2706b730e11SBram Moolenaar HiLink rubyDocumentation Comment 2716b730e11SBram Moolenaar HiLink rubyEscape Special 2726b730e11SBram Moolenaar HiLink rubyInterpolation Special 2736b730e11SBram Moolenaar HiLink rubyNoInterpolation rubyString 2746b730e11SBram Moolenaar HiLink rubySharpBang PreProc 2756b730e11SBram Moolenaar HiLink rubyStringDelimiter Delimiter 2766b730e11SBram Moolenaar HiLink rubyString String 2776b730e11SBram Moolenaar HiLink rubyTodo Todo 2786b730e11SBram Moolenaar 2796b730e11SBram Moolenaar HiLink rubyError Error 2806b730e11SBram Moolenaar HiLink rubySpaceError rubyError 281071d4279SBram Moolenaar 282071d4279SBram Moolenaar delcommand HiLink 283071d4279SBram Moolenaarendif 284071d4279SBram Moolenaar 285071d4279SBram Moolenaarlet b:current_syntax = "ruby" 286071d4279SBram Moolenaar 2876b730e11SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 ff=unix: 288