1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: Ruby 3*6b730e11SBram Moolenaar" Maintainer: Doug Kearns <djkea2 at gus.gscit.monash.edu.au> 4*6b730e11SBram Moolenaar" Info: $Id$ 5*6b730e11SBram Moolenaar" URL: http://vim-ruby.sourceforge.net 6*6b730e11SBram Moolenaar" Anon CVS: See above site 7*6b730e11SBram Moolenaar" Licence: GPL (http://www.gnu.org) 8*6b730e11SBram Moolenaar" Disclaimer: 9*6b730e11SBram Moolenaar" This program is distributed in the hope that it will be useful, 10*6b730e11SBram Moolenaar" but WITHOUT ANY WARRANTY; without even the implied warranty of 11*6b730e11SBram Moolenaar" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12*6b730e11SBram Moolenaar" GNU General Public License for more details. 13*6b730e11SBram Moolenaar" ---------------------------------------------------------------------------- 14*6b730e11SBram Moolenaar" 15071d4279SBram Moolenaar" Previous Maintainer: Mirko Nasato 16071d4279SBram Moolenaar" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN) 17*6b730e11SBram Moolenaar" ---------------------------------------------------------------------------- 18071d4279SBram Moolenaar 19071d4279SBram Moolenaar" For version 5.x: Clear all syntax items 20071d4279SBram Moolenaar" For version 6.x: Quit when a syntax file was already loaded 21071d4279SBram Moolenaarif version < 600 22071d4279SBram Moolenaar syntax clear 23071d4279SBram Moolenaarelseif exists("b:current_syntax") 24071d4279SBram Moolenaar finish 25071d4279SBram Moolenaarendif 26071d4279SBram Moolenaar 27*6b730e11SBram Moolenaarif has("folding") && exists("ruby_fold") 28*6b730e11SBram Moolenaar setlocal foldmethod=syntax 29*6b730e11SBram Moolenaarendif 30*6b730e11SBram Moolenaar 31*6b730e11SBram Moolenaarif exists("ruby_space_errors") 32*6b730e11SBram Moolenaar if !exists("ruby_no_trail_space_error") 33*6b730e11SBram Moolenaar syn match rubySpaceError display excludenl "\s\+$" 34*6b730e11SBram Moolenaar endif 35*6b730e11SBram Moolenaar if !exists("ruby_no_tab_space_error") 36*6b730e11SBram Moolenaar syn match rubySpaceError display " \+\t"me=e-1 37*6b730e11SBram Moolenaar endif 38*6b730e11SBram Moolenaarendif 39*6b730e11SBram Moolenaar 40071d4279SBram Moolenaar" Expression Substitution and Backslash Notation 41*6b730e11SBram Moolenaarsyn match rubyEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display 42*6b730e11SBram Moolenaarsyn match rubyEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display 43*6b730e11SBram Moolenaarsyn match rubyInterpolation "#{[^}]*}" contained 44*6b730e11SBram Moolenaarsyn match rubyInterpolation "#\%(\$\|@@\=\)\w\+" contained display 45*6b730e11SBram Moolenaarsyn match rubyNoInterpolation "\\#{[^}]*}" contained 46*6b730e11SBram Moolenaarsyn match rubyNoInterpolation "\\#\%(\$\|@@\=\)\w\+" contained display 47*6b730e11SBram Moolenaar 48*6b730e11SBram Moolenaarsyn match rubyDelimEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE 49*6b730e11SBram Moolenaar 50*6b730e11SBram Moolenaarsyn region rubyNestedParentheses start="(" end=")" skip="\\\\\|\\)" transparent contained contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape 51*6b730e11SBram Moolenaarsyn region rubyNestedCurlyBraces start="{" end="}" skip="\\\\\|\\}" transparent contained contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape 52*6b730e11SBram Moolenaarsyn region rubyNestedAngleBrackets start="<" end=">" skip="\\\\\|\\>" transparent contained contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape 53*6b730e11SBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" end="\]" skip="\\\\\|\\\]" transparent contained contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape 54*6b730e11SBram Moolenaar 55*6b730e11SBram Moolenaarsyn cluster rubyStringSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyEscape 56*6b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets 57071d4279SBram Moolenaar 58071d4279SBram Moolenaar" Numbers and ASCII Codes 59*6b730e11SBram Moolenaarsyn match rubyASCIICode "\w\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)" 60*6b730e11SBram Moolenaarsyn match rubyInteger "\<0[xX]\x\+\%(_\x\+\)*\>" display 61*6b730e11SBram Moolenaarsyn match rubyInteger "\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>" display 62*6b730e11SBram Moolenaarsyn match rubyInteger "\<0[oO]\=\o\+\%(_\o\+\)*\>" display 63*6b730e11SBram Moolenaarsyn match rubyInteger "\<0[bB][01]\+\%(_[01]\+\)*\>" display 64*6b730e11SBram Moolenaarsyn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>" display 65*6b730e11SBram Moolenaarsyn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>" display 66071d4279SBram Moolenaar 67*6b730e11SBram Moolenaar" Identifiers 68*6b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent 69*6b730e11SBram Moolenaarsyn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent 70071d4279SBram Moolenaar 71*6b730e11SBram Moolenaarsyn match rubyConstant "\%(\%(\.\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\>\%(\s*(\)\@!" 72*6b730e11SBram Moolenaarsyn match rubyClassVariable "@@\h\w*" display 73*6b730e11SBram Moolenaarsyn match rubyInstanceVariable "@\h\w*" display 74*6b730e11SBram Moolenaarsyn match rubyGlobalVariable "$\%(\h\w*\|-.\)" 75*6b730e11SBram Moolenaarsyn match rubySymbol ":\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" 76*6b730e11SBram Moolenaarsyn match rubySymbol ":\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" 77*6b730e11SBram Moolenaarsyn match rubySymbol ":\@<!:\%(\$\|@@\=\)\=\h\w*[?!=]\=" 78*6b730e11SBram Moolenaarsyn region rubySymbol start=":\@<!:\"" end="\"" skip="\\\\\|\\\"" 79*6b730e11SBram Moolenaarsyn match rubyBlockParameter "\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display 80071d4279SBram Moolenaar 81*6b730e11SBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]# 82*6b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>" display 83*6b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display 84*6b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display 85*6b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOAD_PATH\|SAFE\|VERBOSE\)\>" display 86*6b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!" 87*6b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!" 88*6b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!" 89071d4279SBram Moolenaar"Obsolete Global Constants 90*6b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>" 91*6b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>" 92071d4279SBram Moolenaar 93071d4279SBram Moolenaar" Normal Regular Expression 94*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\)\|[\~=!|&(,[]\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial 95*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\<\%(split\|scan\|gsub\|sub\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial 96*6b730e11SBram Moolenaar 97*6b730e11SBram Moolenaar" Normal String and Shell Command Output 98*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial 99*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="'" end="'" skip="\\\\\|\\'" 100*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial 101*6b730e11SBram Moolenaar 102*6b730e11SBram Moolenaar" Generalized Regular Expression 103*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomx]*" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 104*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r{" end="}[iomx]*" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold 105*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r<" end=">[iomx]*" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold 106*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\[" end="\][iomx]*" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold 107*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r(" end=")[iomx]*" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold 108*6b730e11SBram Moolenaar 109*6b730e11SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings 110*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold 111*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimEscape 112*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimEscape 113*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimEscape 114*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimEscape 115*6b730e11SBram Moolenaar 116*6b730e11SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output 117*6b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string 118*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 119*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 120*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold 121*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold 122*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold 123*6b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold 124071d4279SBram Moolenaar 125071d4279SBram Moolenaar" Here Document 126*6b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs\%(\h\w*\)+ end=+$+ oneline contains=TOP 127*6b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=TOP 128*6b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=TOP 129*6b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=TOP 130071d4279SBram Moolenaar 131*6b730e11SBram 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 132*6b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<"\z([^"]*\)"\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend 133*6b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<'\z([^']*\)'\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart nextgroup=rubyFunction fold keepend 134*6b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<`\z([^`]*\)`\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend 135*6b730e11SBram Moolenaar 136*6b730e11SBram 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 137*6b730e11SBram 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 138*6b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-'\z([^']*\)'\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart nextgroup=rubyFunction fold keepend 139*6b730e11SBram 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 140*6b730e11SBram Moolenaar 141*6b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby' 142*6b730e11SBram Moolenaar let ruby_no_expensive = 1 143*6b730e11SBram Moolenaarend 144071d4279SBram Moolenaar 145071d4279SBram Moolenaar" Expensive Mode - colorize *end* according to opening statement 146071d4279SBram Moolenaarif !exists("ruby_no_expensive") 147*6b730e11SBram Moolenaar syn region rubyFunction matchgroup=rubyDefine start="\<def\s\+" end="\ze\%(\s\|(\|;\|$\)" oneline 148*6b730e11SBram Moolenaar syn region rubyClass matchgroup=rubyDefine start="\<class\s\+" end="\ze\%(\s\|<\|;\|$\)" oneline 149*6b730e11SBram Moolenaar syn match rubyDefine "\<class\ze<<" 150*6b730e11SBram Moolenaar syn region rubyModule matchgroup=rubyDefine start="\<module\s\+" end="\ze\%(\s\|;\|$\)" oneline 151071d4279SBram Moolenaar 152*6b730e11SBram Moolenaar syn region rubyBlock start="\<def\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyFunction fold 153*6b730e11SBram Moolenaar syn region rubyBlock start="\<class\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyClass fold 154*6b730e11SBram Moolenaar syn region rubyBlock start="\<module\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyModule fold 155071d4279SBram Moolenaar 156*6b730e11SBram Moolenaar " modifiers 157*6b730e11SBram Moolenaar syn match rubyControl "\<\%(if\|unless\|while\|until\)\>" display 158071d4279SBram Moolenaar 159071d4279SBram Moolenaar " *do* requiring *end* 160*6b730e11SBram Moolenaar syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold 161071d4279SBram Moolenaar 162071d4279SBram Moolenaar " *{* requiring *}* 163*6b730e11SBram Moolenaar syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold 164071d4279SBram Moolenaar 165071d4279SBram Moolenaar " statements without *do* 166*6b730e11SBram Moolenaar syn region rubyNoDoBlock matchgroup=rubyControl start="\<\%(case\|begin\)\>" start="\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\zs\%(if\|unless\)\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold 167071d4279SBram Moolenaar 168071d4279SBram Moolenaar " statement with optional *do* 169*6b730e11SBram Moolenaar syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo 170*6b730e11SBram Moolenaar syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[,;=([<>~\*/%!&^|+-]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyControl end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyOptDoLine fold 171071d4279SBram Moolenaar 172071d4279SBram Moolenaar if !exists("ruby_minlines") 173071d4279SBram Moolenaar let ruby_minlines = 50 174071d4279SBram Moolenaar endif 175071d4279SBram Moolenaar exec "syn sync minlines=" . ruby_minlines 176071d4279SBram Moolenaar 177*6b730e11SBram Moolenaarelse 178*6b730e11SBram Moolenaar syn region rubyFunction matchgroup=rubyControl start="\<def\s\+" end="\ze\%(\s\|(\|;\|$\)" oneline 179*6b730e11SBram Moolenaar syn region rubyClass matchgroup=rubyControl start="\<class\s\+" end="\ze\%(\s\|<\|;\|$\)" oneline 180*6b730e11SBram Moolenaar syn match rubyControl "\<class\ze<<" 181*6b730e11SBram Moolenaar syn region rubyModule matchgroup=rubyControl start="\<module\s\+" end="\ze\%(\s\|;\|$\)" oneline 182071d4279SBram Moolenaar syn keyword rubyControl case begin do for if unless while until end 183*6b730e11SBram Moolenaarendif 184071d4279SBram Moolenaar 185071d4279SBram Moolenaar" Keywords 186*6b730e11SBram Moolenaar" Note: the following keywords have already been defined: 187*6b730e11SBram Moolenaar" begin case class def do end for if module unless until while 188*6b730e11SBram Moolenaarsyn keyword rubyControl and break else elsif ensure in next not or redo rescue retry return then when 189*6b730e11SBram Moolenaarsyn match rubyOperator "\<defined?" display 190*6b730e11SBram Moolenaarsyn keyword rubyKeyword alias super undef yield 191*6b730e11SBram Moolenaarsyn keyword rubyBoolean true false 192*6b730e11SBram Moolenaarsyn keyword rubyPseudoVariable nil self __FILE__ __LINE__ 193071d4279SBram Moolenaarsyn keyword rubyBeginEnd BEGIN END 194071d4279SBram Moolenaar 195*6b730e11SBram Moolenaar" Special Methods 196*6b730e11SBram Moolenaarif !exists("ruby_no_special_methods") 197*6b730e11SBram Moolenaar syn keyword rubyAccess public protected private 198*6b730e11SBram Moolenaar syn keyword rubyAttribute attr attr_accessor attr_reader attr_writer 199*6b730e11SBram Moolenaar syn keyword rubyControl abort at_exit exit fork loop trap 200*6b730e11SBram Moolenaar syn keyword rubyEval eval class_eval instance_eval module_eval 201*6b730e11SBram Moolenaar syn keyword rubyException raise fail catch throw 202*6b730e11SBram Moolenaar syn keyword rubyInclude autoload extend include load require 203*6b730e11SBram Moolenaar syn keyword rubyKeyword callcc caller lambda proc 204071d4279SBram Moolenaarendif 205071d4279SBram Moolenaar 206*6b730e11SBram Moolenaar" Comments and Documentation 207*6b730e11SBram Moolenaarsyn match rubySharpBang "\%^#!.*" display 208*6b730e11SBram Moolenaarsyn keyword rubyTodo FIXME NOTE TODO XXX contained 209*6b730e11SBram Moolenaarsyn match rubyComment "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell 210*6b730e11SBram Moolenaarsyn region rubyDocumentation start="^=begin" end="^=end.*$" contains=rubySpaceError,rubyTodo,@Spell fold 211*6b730e11SBram Moolenaar 212*6b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver 213*6b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>" transparent contains=NONE 214*6b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>" transparent contains=NONE 215*6b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>" transparent contains=NONE 216*6b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>" transparent contains=NONE 217*6b730e11SBram Moolenaar 218*6b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>" transparent contains=NONE 219*6b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>" transparent contains=NONE 220*6b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE 221*6b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>" transparent contains=NONE 222*6b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>" transparent contains=NONE 223*6b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>" transparent contains=NONE 224071d4279SBram Moolenaar 225071d4279SBram Moolenaar" __END__ Directive 226*6b730e11SBram Moolenaarsyn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold 227071d4279SBram Moolenaar 228071d4279SBram Moolenaar" Define the default highlighting. 229071d4279SBram Moolenaar" For version 5.7 and earlier: only when not done already 230071d4279SBram Moolenaar" For version 5.8 and later: only when an item doesn't have highlighting yet 231071d4279SBram Moolenaarif version >= 508 || !exists("did_ruby_syntax_inits") 232071d4279SBram Moolenaar if version < 508 233071d4279SBram Moolenaar let did_ruby_syntax_inits = 1 234071d4279SBram Moolenaar command -nargs=+ HiLink hi link <args> 235071d4279SBram Moolenaar else 236071d4279SBram Moolenaar command -nargs=+ HiLink hi def link <args> 237071d4279SBram Moolenaar endif 238071d4279SBram Moolenaar 239071d4279SBram Moolenaar HiLink rubyDefine Define 240071d4279SBram Moolenaar HiLink rubyFunction Function 241071d4279SBram Moolenaar HiLink rubyControl Statement 242071d4279SBram Moolenaar HiLink rubyInclude Include 243*6b730e11SBram Moolenaar HiLink rubyInteger Number 244*6b730e11SBram Moolenaar HiLink rubyASCIICode rubyInteger 245*6b730e11SBram Moolenaar HiLink rubyFloat Float 246*6b730e11SBram Moolenaar HiLink rubyBoolean rubyPseudoVariable 247071d4279SBram Moolenaar HiLink rubyException Exception 248*6b730e11SBram Moolenaar HiLink rubyClass Type 249*6b730e11SBram Moolenaar HiLink rubyModule Type 250*6b730e11SBram Moolenaar if !exists("ruby_no_identifiers") 251071d4279SBram Moolenaar HiLink rubyIdentifier Identifier 252*6b730e11SBram Moolenaar else 253*6b730e11SBram Moolenaar HiLink rubyIdentifier NONE 254*6b730e11SBram Moolenaar endif 255071d4279SBram Moolenaar HiLink rubyClassVariable rubyIdentifier 256071d4279SBram Moolenaar HiLink rubyConstant rubyIdentifier 257071d4279SBram Moolenaar HiLink rubyGlobalVariable rubyIdentifier 258*6b730e11SBram Moolenaar HiLink rubyBlockParameter rubyIdentifier 259071d4279SBram Moolenaar HiLink rubyInstanceVariable rubyIdentifier 260071d4279SBram Moolenaar HiLink rubyPredefinedIdentifier rubyIdentifier 261071d4279SBram Moolenaar HiLink rubyPredefinedConstant rubyPredefinedIdentifier 262071d4279SBram Moolenaar HiLink rubyPredefinedVariable rubyPredefinedIdentifier 263071d4279SBram Moolenaar HiLink rubySymbol rubyIdentifier 264071d4279SBram Moolenaar HiLink rubyKeyword Keyword 265*6b730e11SBram Moolenaar HiLink rubyOperator Operator 266071d4279SBram Moolenaar HiLink rubyBeginEnd Statement 267*6b730e11SBram Moolenaar HiLink rubyAccess Statement 268*6b730e11SBram Moolenaar HiLink rubyAttribute Statement 269*6b730e11SBram Moolenaar HiLink rubyEval Statement 270*6b730e11SBram Moolenaar HiLink rubyPseudoVariable Constant 271071d4279SBram Moolenaar 272071d4279SBram Moolenaar HiLink rubyComment Comment 273071d4279SBram Moolenaar HiLink rubyData Comment 274071d4279SBram Moolenaar HiLink rubyDataDirective Delimiter 275*6b730e11SBram Moolenaar HiLink rubyDocumentation Comment 276*6b730e11SBram Moolenaar HiLink rubyEscape Special 277*6b730e11SBram Moolenaar HiLink rubyInterpolation Special 278*6b730e11SBram Moolenaar HiLink rubyNoInterpolation rubyString 279*6b730e11SBram Moolenaar HiLink rubySharpBang PreProc 280*6b730e11SBram Moolenaar HiLink rubyStringDelimiter Delimiter 281*6b730e11SBram Moolenaar HiLink rubyString String 282*6b730e11SBram Moolenaar HiLink rubyTodo Todo 283*6b730e11SBram Moolenaar 284*6b730e11SBram Moolenaar HiLink rubyError Error 285*6b730e11SBram Moolenaar HiLink rubySpaceError rubyError 286071d4279SBram Moolenaar 287071d4279SBram Moolenaar delcommand HiLink 288071d4279SBram Moolenaarendif 289071d4279SBram Moolenaar 290071d4279SBram Moolenaarlet b:current_syntax = "ruby" 291071d4279SBram Moolenaar 292*6b730e11SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 ff=unix: 293