1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: Ruby 36b730e11SBram Moolenaar" Maintainer: Doug Kearns <djkea2 at gus.gscit.monash.edu.au> 46b730e11SBram Moolenaar" Info: $Id$ 5*a5792f58SBram Moolenaar" URL: http://vim-ruby.rubyforge.org 66b730e11SBram Moolenaar" Anon CVS: See above site 76b730e11SBram Moolenaar" ---------------------------------------------------------------------------- 86b730e11SBram Moolenaar" 9071d4279SBram Moolenaar" Previous Maintainer: Mirko Nasato 10071d4279SBram Moolenaar" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN) 116b730e11SBram Moolenaar" ---------------------------------------------------------------------------- 12071d4279SBram Moolenaar 13071d4279SBram Moolenaar" For version 5.x: Clear all syntax items 14071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded 15071d4279SBram Moolenaarif version < 600 16071d4279SBram Moolenaar syntax clear 17071d4279SBram Moolenaarelseif exists("b:current_syntax") 18071d4279SBram Moolenaar finish 19071d4279SBram Moolenaarendif 20071d4279SBram Moolenaar 216b730e11SBram Moolenaarif has("folding") && exists("ruby_fold") 226b730e11SBram Moolenaar setlocal foldmethod=syntax 236b730e11SBram Moolenaarendif 246b730e11SBram Moolenaar 256b730e11SBram Moolenaarif exists("ruby_space_errors") 266b730e11SBram Moolenaar if !exists("ruby_no_trail_space_error") 276b730e11SBram Moolenaar syn match rubySpaceError display excludenl "\s\+$" 286b730e11SBram Moolenaar endif 296b730e11SBram Moolenaar if !exists("ruby_no_tab_space_error") 306b730e11SBram Moolenaar syn match rubySpaceError display " \+\t"me=e-1 316b730e11SBram Moolenaar endif 326b730e11SBram Moolenaarendif 336b730e11SBram Moolenaar 34071d4279SBram Moolenaar" Expression Substitution and Backslash Notation 356b730e11SBram Moolenaarsyn match rubyEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display 366b730e11SBram Moolenaarsyn match rubyEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display 376b730e11SBram Moolenaarsyn match rubyInterpolation "#{[^}]*}" contained 386b730e11SBram Moolenaarsyn match rubyInterpolation "#\%(\$\|@@\=\)\w\+" contained display 396b730e11SBram Moolenaarsyn match rubyNoInterpolation "\\#{[^}]*}" contained 406b730e11SBram Moolenaarsyn match rubyNoInterpolation "\\#\%(\$\|@@\=\)\w\+" contained display 416b730e11SBram Moolenaar 426b730e11SBram Moolenaarsyn match rubyDelimEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE 436b730e11SBram Moolenaar 446b730e11SBram Moolenaarsyn region rubyNestedParentheses start="(" end=")" skip="\\\\\|\\)" transparent contained contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape 456b730e11SBram Moolenaarsyn region rubyNestedCurlyBraces start="{" end="}" skip="\\\\\|\\}" transparent contained contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape 466b730e11SBram Moolenaarsyn region rubyNestedAngleBrackets start="<" end=">" skip="\\\\\|\\>" transparent contained contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape 476b730e11SBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" end="\]" skip="\\\\\|\\\]" transparent contained contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape 486b730e11SBram Moolenaar 496b730e11SBram Moolenaarsyn cluster rubyStringSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyEscape 506b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets 51071d4279SBram Moolenaar 52071d4279SBram Moolenaar" Numbers and ASCII Codes 536b730e11SBram Moolenaarsyn match rubyASCIICode "\w\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)" 546b730e11SBram Moolenaarsyn match rubyInteger "\<0[xX]\x\+\%(_\x\+\)*\>" display 556b730e11SBram Moolenaarsyn match rubyInteger "\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>" display 566b730e11SBram Moolenaarsyn match rubyInteger "\<0[oO]\=\o\+\%(_\o\+\)*\>" display 576b730e11SBram Moolenaarsyn match rubyInteger "\<0[bB][01]\+\%(_[01]\+\)*\>" display 586b730e11SBram Moolenaarsyn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>" display 596b730e11SBram Moolenaarsyn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>" display 60071d4279SBram Moolenaar 616b730e11SBram Moolenaar" Identifiers 626b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent 636b730e11SBram Moolenaarsyn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent 64071d4279SBram Moolenaar 656b730e11SBram Moolenaarsyn match rubyConstant "\%(\%(\.\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\>\%(\s*(\)\@!" 666b730e11SBram Moolenaarsyn match rubyClassVariable "@@\h\w*" display 676b730e11SBram Moolenaarsyn match rubyInstanceVariable "@\h\w*" display 686b730e11SBram Moolenaarsyn match rubyGlobalVariable "$\%(\h\w*\|-.\)" 696b730e11SBram Moolenaarsyn match rubySymbol ":\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" 706b730e11SBram Moolenaarsyn match rubySymbol ":\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" 716b730e11SBram Moolenaarsyn match rubySymbol ":\@<!:\%(\$\|@@\=\)\=\h\w*[?!=]\=" 726b730e11SBram Moolenaarsyn region rubySymbol start=":\@<!:\"" end="\"" skip="\\\\\|\\\"" 736b730e11SBram Moolenaarsyn match rubyBlockParameter "\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display 74071d4279SBram Moolenaar 756b730e11SBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]# 766b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>" display 776b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display 786b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display 791e015460SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display 806b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!" 816b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!" 826b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!" 83071d4279SBram Moolenaar"Obsolete Global Constants 846b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>" 856b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>" 86071d4279SBram Moolenaar 87071d4279SBram Moolenaar" Normal Regular Expression 88d5cdbeb8SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial 896b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\<\%(split\|scan\|gsub\|sub\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial 906b730e11SBram Moolenaar 916b730e11SBram Moolenaar" Normal String and Shell Command Output 926b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial 936b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="'" end="'" skip="\\\\\|\\'" 946b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial 956b730e11SBram Moolenaar 966b730e11SBram Moolenaar" Generalized Regular Expression 976b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomx]*" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 986b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r{" end="}[iomx]*" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold 996b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r<" end=">[iomx]*" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold 1006b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\[" end="\][iomx]*" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold 1016b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r(" end=")[iomx]*" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold 1026b730e11SBram Moolenaar 1036b730e11SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings 1046b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold 1056b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimEscape 1066b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimEscape 1076b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimEscape 1086b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimEscape 1096b730e11SBram Moolenaar 1106b730e11SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output 1116b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string 1126b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 1136b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 1146b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold 1156b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold 1166b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold 1176b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold 118071d4279SBram Moolenaar 119071d4279SBram Moolenaar" Here Document 1206b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs\%(\h\w*\)+ end=+$+ oneline contains=TOP 1216b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs"\%([^"]*\)"+ 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 124071d4279SBram Moolenaar 1256b730e11SBram 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 1266b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<"\z([^"]*\)"\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 nextgroup=rubyFunction fold keepend 1286b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<`\z([^`]*\)`\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend 1296b730e11SBram Moolenaar 1306b730e11SBram 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 1316b730e11SBram 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 1326b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-'\z([^']*\)'\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart 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,@rubyStringSpecial nextgroup=rubyFunction fold keepend 1346b730e11SBram Moolenaar 1356b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby' 136d5cdbeb8SBram Moolenaar let b:ruby_no_expensive = 1 1376b730e11SBram Moolenaarend 138071d4279SBram Moolenaar 139071d4279SBram Moolenaar" Expensive Mode - colorize *end* according to opening statement 140d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive") 141d5cdbeb8SBram Moolenaar syn region rubyFunction matchgroup=rubyDefine start="\<def\s\+" end="\%(\s*\%(\s\|(\|;\|$\|#\)\)\@=" oneline 142d5cdbeb8SBram Moolenaar syn region rubyClass matchgroup=rubyDefine start="\<class\s\+" end="\%(\s*\%(\s\|<\|;\|$\|#\)\)\@=" oneline 1436b730e11SBram Moolenaar syn match rubyDefine "\<class\ze<<" 144d5cdbeb8SBram Moolenaar syn region rubyModule matchgroup=rubyDefine start="\<module\s\+" end="\%(\s*\%(\s\|;\|$\|#\)\)\@=" oneline 145071d4279SBram Moolenaar 1466b730e11SBram Moolenaar syn region rubyBlock start="\<def\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyFunction fold 1476b730e11SBram Moolenaar syn region rubyBlock start="\<class\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyClass fold 1486b730e11SBram Moolenaar syn region rubyBlock start="\<module\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyModule fold 149071d4279SBram Moolenaar 1506b730e11SBram Moolenaar " modifiers 1516b730e11SBram Moolenaar syn match rubyControl "\<\%(if\|unless\|while\|until\)\>" display 152071d4279SBram Moolenaar 153071d4279SBram Moolenaar " *do* requiring *end* 1546b730e11SBram Moolenaar syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold 155071d4279SBram Moolenaar 156071d4279SBram Moolenaar " *{* requiring *}* 1576b730e11SBram Moolenaar syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold 158071d4279SBram Moolenaar 159071d4279SBram Moolenaar " statements without *do* 1606b730e11SBram Moolenaar syn region rubyNoDoBlock matchgroup=rubyControl start="\<\%(case\|begin\)\>" start="\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\zs\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold 161071d4279SBram Moolenaar 162071d4279SBram Moolenaar " statement with optional *do* 1631e015460SBram Moolenaar syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[?:,;=([<>~\*/%!&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo 1641e015460SBram Moolenaar syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyControl end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyOptDoLine fold 165071d4279SBram Moolenaar 166071d4279SBram Moolenaar if !exists("ruby_minlines") 167071d4279SBram Moolenaar let ruby_minlines = 50 168071d4279SBram Moolenaar endif 169071d4279SBram Moolenaar exec "syn sync minlines=" . ruby_minlines 170071d4279SBram Moolenaar 1716b730e11SBram Moolenaarelse 1726b730e11SBram Moolenaar syn region rubyFunction matchgroup=rubyControl start="\<def\s\+" end="\ze\%(\s\|(\|;\|$\)" oneline 1736b730e11SBram Moolenaar syn region rubyClass matchgroup=rubyControl start="\<class\s\+" end="\ze\%(\s\|<\|;\|$\)" oneline 1746b730e11SBram Moolenaar syn match rubyControl "\<class\ze<<" 1756b730e11SBram Moolenaar syn region rubyModule matchgroup=rubyControl start="\<module\s\+" end="\ze\%(\s\|;\|$\)" oneline 176071d4279SBram Moolenaar syn keyword rubyControl case begin do for if unless while until end 1776b730e11SBram Moolenaarendif 178071d4279SBram Moolenaar 179071d4279SBram Moolenaar" Keywords 1806b730e11SBram Moolenaar" Note: the following keywords have already been defined: 1816b730e11SBram Moolenaar" begin case class def do end for if module unless until while 1826b730e11SBram Moolenaarsyn keyword rubyControl and break else elsif ensure in next not or redo rescue retry return then when 1836b730e11SBram Moolenaarsyn match rubyOperator "\<defined?" display 1846b730e11SBram Moolenaarsyn keyword rubyKeyword alias super undef yield 1856b730e11SBram Moolenaarsyn keyword rubyBoolean true false 1866b730e11SBram Moolenaarsyn keyword rubyPseudoVariable nil self __FILE__ __LINE__ 187071d4279SBram Moolenaarsyn keyword rubyBeginEnd BEGIN END 188071d4279SBram Moolenaar 1896b730e11SBram Moolenaar" Special Methods 1906b730e11SBram Moolenaarif !exists("ruby_no_special_methods") 1916b730e11SBram Moolenaar syn keyword rubyAccess public protected private 1926b730e11SBram Moolenaar syn keyword rubyAttribute attr attr_accessor attr_reader attr_writer 1931e015460SBram Moolenaar syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>\)" 1946b730e11SBram Moolenaar syn keyword rubyEval eval class_eval instance_eval module_eval 1956b730e11SBram Moolenaar syn keyword rubyException raise fail catch throw 1966b730e11SBram Moolenaar syn keyword rubyInclude autoload extend include load require 1976b730e11SBram Moolenaar syn keyword rubyKeyword callcc caller lambda proc 198071d4279SBram Moolenaarendif 199071d4279SBram Moolenaar 2006b730e11SBram Moolenaar" Comments and Documentation 2016b730e11SBram Moolenaarsyn match rubySharpBang "\%^#!.*" display 2026b730e11SBram Moolenaarsyn keyword rubyTodo FIXME NOTE TODO XXX contained 2036b730e11SBram Moolenaarsyn match rubyComment "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell 2046b730e11SBram Moolenaarsyn region rubyDocumentation start="^=begin" end="^=end.*$" contains=rubySpaceError,rubyTodo,@Spell fold 2056b730e11SBram Moolenaar 2066b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver 2076b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>" transparent contains=NONE 2086b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>" transparent contains=NONE 2096b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>" transparent contains=NONE 2106b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>" transparent contains=NONE 2116b730e11SBram Moolenaar 2126b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>" transparent contains=NONE 2136b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>" transparent contains=NONE 2146b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE 2156b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>" transparent contains=NONE 2166b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>" transparent contains=NONE 2176b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>" transparent contains=NONE 218071d4279SBram Moolenaar 219071d4279SBram Moolenaar" __END__ Directive 2206b730e11SBram Moolenaarsyn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold 221071d4279SBram Moolenaar 222071d4279SBram Moolenaar" Define the default highlighting. 223071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already 224071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet 225071d4279SBram Moolenaarif version >= 508 || !exists("did_ruby_syntax_inits") 226071d4279SBram Moolenaar if version < 508 227071d4279SBram Moolenaar let did_ruby_syntax_inits = 1 228071d4279SBram Moolenaar command -nargs=+ HiLink hi link <args> 229071d4279SBram Moolenaar else 230071d4279SBram Moolenaar command -nargs=+ HiLink hi def link <args> 231071d4279SBram Moolenaar endif 232071d4279SBram Moolenaar 233071d4279SBram Moolenaar HiLink rubyDefine Define 234071d4279SBram Moolenaar HiLink rubyFunction Function 235071d4279SBram Moolenaar HiLink rubyControl Statement 236071d4279SBram Moolenaar HiLink rubyInclude Include 2376b730e11SBram Moolenaar HiLink rubyInteger Number 2386b730e11SBram Moolenaar HiLink rubyASCIICode rubyInteger 2396b730e11SBram Moolenaar HiLink rubyFloat Float 2406b730e11SBram Moolenaar HiLink rubyBoolean rubyPseudoVariable 241071d4279SBram Moolenaar HiLink rubyException Exception 2426b730e11SBram Moolenaar HiLink rubyClass Type 2436b730e11SBram Moolenaar HiLink rubyModule Type 2446b730e11SBram Moolenaar if !exists("ruby_no_identifiers") 245071d4279SBram Moolenaar HiLink rubyIdentifier Identifier 2466b730e11SBram Moolenaar else 2476b730e11SBram Moolenaar HiLink rubyIdentifier NONE 2486b730e11SBram Moolenaar endif 249071d4279SBram Moolenaar HiLink rubyClassVariable rubyIdentifier 250071d4279SBram Moolenaar HiLink rubyConstant rubyIdentifier 251071d4279SBram Moolenaar HiLink rubyGlobalVariable rubyIdentifier 2526b730e11SBram Moolenaar HiLink rubyBlockParameter rubyIdentifier 253071d4279SBram Moolenaar HiLink rubyInstanceVariable rubyIdentifier 254071d4279SBram Moolenaar HiLink rubyPredefinedIdentifier rubyIdentifier 255071d4279SBram Moolenaar HiLink rubyPredefinedConstant rubyPredefinedIdentifier 256071d4279SBram Moolenaar HiLink rubyPredefinedVariable rubyPredefinedIdentifier 257071d4279SBram Moolenaar HiLink rubySymbol rubyIdentifier 258071d4279SBram Moolenaar HiLink rubyKeyword Keyword 2596b730e11SBram Moolenaar HiLink rubyOperator Operator 260071d4279SBram Moolenaar HiLink rubyBeginEnd Statement 2616b730e11SBram Moolenaar HiLink rubyAccess Statement 2626b730e11SBram Moolenaar HiLink rubyAttribute Statement 2636b730e11SBram Moolenaar HiLink rubyEval Statement 2646b730e11SBram Moolenaar HiLink rubyPseudoVariable Constant 265071d4279SBram Moolenaar 266071d4279SBram Moolenaar HiLink rubyComment Comment 267071d4279SBram Moolenaar HiLink rubyData Comment 268071d4279SBram Moolenaar HiLink rubyDataDirective Delimiter 2696b730e11SBram Moolenaar HiLink rubyDocumentation Comment 2706b730e11SBram Moolenaar HiLink rubyEscape Special 2716b730e11SBram Moolenaar HiLink rubyInterpolation Special 2726b730e11SBram Moolenaar HiLink rubyNoInterpolation rubyString 2736b730e11SBram Moolenaar HiLink rubySharpBang PreProc 2746b730e11SBram Moolenaar HiLink rubyStringDelimiter Delimiter 2756b730e11SBram Moolenaar HiLink rubyString String 2766b730e11SBram Moolenaar HiLink rubyTodo Todo 2776b730e11SBram Moolenaar 2786b730e11SBram Moolenaar HiLink rubyError Error 2796b730e11SBram Moolenaar HiLink rubySpaceError rubyError 280071d4279SBram Moolenaar 281071d4279SBram Moolenaar delcommand HiLink 282071d4279SBram Moolenaarendif 283071d4279SBram Moolenaar 284071d4279SBram Moolenaarlet b:current_syntax = "ruby" 285071d4279SBram Moolenaar 2866b730e11SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 ff=unix: 287