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$ 56b730e11SBram Moolenaar" URL: http://vim-ruby.sourceforge.net 66b730e11SBram Moolenaar" Anon CVS: See above site 76b730e11SBram Moolenaar" Licence: GPL (http://www.gnu.org) 86b730e11SBram Moolenaar" Disclaimer: 96b730e11SBram Moolenaar" This program is distributed in the hope that it will be useful, 106b730e11SBram Moolenaar" but WITHOUT ANY WARRANTY; without even the implied warranty of 116b730e11SBram Moolenaar" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 126b730e11SBram Moolenaar" GNU General Public License for more details. 136b730e11SBram Moolenaar" ---------------------------------------------------------------------------- 146b730e11SBram Moolenaar" 15071d4279SBram Moolenaar" Previous Maintainer: Mirko Nasato 16071d4279SBram Moolenaar" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN) 176b730e11SBram 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 276b730e11SBram Moolenaarif has("folding") && exists("ruby_fold") 286b730e11SBram Moolenaar setlocal foldmethod=syntax 296b730e11SBram Moolenaarendif 306b730e11SBram Moolenaar 316b730e11SBram Moolenaarif exists("ruby_space_errors") 326b730e11SBram Moolenaar if !exists("ruby_no_trail_space_error") 336b730e11SBram Moolenaar syn match rubySpaceError display excludenl "\s\+$" 346b730e11SBram Moolenaar endif 356b730e11SBram Moolenaar if !exists("ruby_no_tab_space_error") 366b730e11SBram Moolenaar syn match rubySpaceError display " \+\t"me=e-1 376b730e11SBram Moolenaar endif 386b730e11SBram Moolenaarendif 396b730e11SBram Moolenaar 40071d4279SBram Moolenaar" Expression Substitution and Backslash Notation 416b730e11SBram Moolenaarsyn match rubyEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display 426b730e11SBram Moolenaarsyn match rubyEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display 436b730e11SBram Moolenaarsyn match rubyInterpolation "#{[^}]*}" contained 446b730e11SBram Moolenaarsyn match rubyInterpolation "#\%(\$\|@@\=\)\w\+" contained display 456b730e11SBram Moolenaarsyn match rubyNoInterpolation "\\#{[^}]*}" contained 466b730e11SBram Moolenaarsyn match rubyNoInterpolation "\\#\%(\$\|@@\=\)\w\+" contained display 476b730e11SBram Moolenaar 486b730e11SBram Moolenaarsyn match rubyDelimEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE 496b730e11SBram Moolenaar 506b730e11SBram Moolenaarsyn region rubyNestedParentheses start="(" end=")" skip="\\\\\|\\)" transparent contained contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape 516b730e11SBram Moolenaarsyn region rubyNestedCurlyBraces start="{" end="}" skip="\\\\\|\\}" transparent contained contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape 526b730e11SBram Moolenaarsyn region rubyNestedAngleBrackets start="<" end=">" skip="\\\\\|\\>" transparent contained contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape 536b730e11SBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" end="\]" skip="\\\\\|\\\]" transparent contained contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape 546b730e11SBram Moolenaar 556b730e11SBram Moolenaarsyn cluster rubyStringSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyEscape 566b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets 57071d4279SBram Moolenaar 58071d4279SBram Moolenaar" Numbers and ASCII Codes 596b730e11SBram Moolenaarsyn match rubyASCIICode "\w\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)" 606b730e11SBram Moolenaarsyn match rubyInteger "\<0[xX]\x\+\%(_\x\+\)*\>" display 616b730e11SBram Moolenaarsyn match rubyInteger "\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>" display 626b730e11SBram Moolenaarsyn match rubyInteger "\<0[oO]\=\o\+\%(_\o\+\)*\>" display 636b730e11SBram Moolenaarsyn match rubyInteger "\<0[bB][01]\+\%(_[01]\+\)*\>" display 646b730e11SBram Moolenaarsyn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>" display 656b730e11SBram Moolenaarsyn match rubyFloat "\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>" display 66071d4279SBram Moolenaar 676b730e11SBram Moolenaar" Identifiers 686b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent 696b730e11SBram Moolenaarsyn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent 70071d4279SBram Moolenaar 716b730e11SBram Moolenaarsyn match rubyConstant "\%(\%(\.\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\>\%(\s*(\)\@!" 726b730e11SBram Moolenaarsyn match rubyClassVariable "@@\h\w*" display 736b730e11SBram Moolenaarsyn match rubyInstanceVariable "@\h\w*" display 746b730e11SBram Moolenaarsyn match rubyGlobalVariable "$\%(\h\w*\|-.\)" 756b730e11SBram Moolenaarsyn match rubySymbol ":\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|==\|=\~\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" 766b730e11SBram Moolenaarsyn match rubySymbol ":\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" 776b730e11SBram Moolenaarsyn match rubySymbol ":\@<!:\%(\$\|@@\=\)\=\h\w*[?!=]\=" 786b730e11SBram Moolenaarsyn region rubySymbol start=":\@<!:\"" end="\"" skip="\\\\\|\\\"" 796b730e11SBram Moolenaarsyn match rubyBlockParameter "\%(\%(\<do\>\|{\)\s*\)\@<=|\s*\zs[( ,a-zA-Z0-9_*)]\+\ze\s*|" display 80071d4279SBram Moolenaar 816b730e11SBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~1-9]# 826b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>" display 836b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display 846b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display 851e015460SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display 866b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!" 876b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\|RUBY_PLATFORM\|RUBY_RELEASE_DATE\)\>\%(\s*(\)\@!" 886b730e11SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_VERSION\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!" 89071d4279SBram Moolenaar"Obsolete Global Constants 906b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(PLATFORM\|RELEASE_DATE\|VERSION\)\>" 916b730e11SBram Moolenaar"syn match rubyPredefinedConstant "\%(::\)\=\zs\%(NotImplementError\)\>" 92071d4279SBram Moolenaar 93071d4279SBram Moolenaar" Normal Regular Expression 94*d5cdbeb8SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\)\|[;\~=!|&(,[>]\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial 956b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\%(\<\%(split\|scan\|gsub\|sub\)\s*\)\@<=/" end="/[iomx]*" skip="\\\\\|\\/" contains=@rubyStringSpecial 966b730e11SBram Moolenaar 976b730e11SBram Moolenaar" Normal String and Shell Command Output 986b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial 996b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="'" end="'" skip="\\\\\|\\'" 1006b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial 1016b730e11SBram Moolenaar 1026b730e11SBram Moolenaar" Generalized Regular Expression 1036b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomx]*" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 1046b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r{" end="}[iomx]*" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold 1056b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r<" end=">[iomx]*" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold 1066b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r\[" end="\][iomx]*" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold 1076b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%r(" end=")[iomx]*" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold 1086b730e11SBram Moolenaar 1096b730e11SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings 1106b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold 1116b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimEscape 1126b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimEscape 1136b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimEscape 1146b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[qsw](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimEscape 1156b730e11SBram Moolenaar 1166b730e11SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output 1176b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string 1186b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 1196b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 1206b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold 1216b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold 1226b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold 1236b730e11SBram Moolenaarsyn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold 124071d4279SBram Moolenaar 125071d4279SBram Moolenaar" Here Document 1266b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs\%(\h\w*\)+ end=+$+ oneline contains=TOP 1276b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=TOP 1286b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=TOP 1296b730e11SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=TOP 130071d4279SBram Moolenaar 1316b730e11SBram 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 1326b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<"\z([^"]*\)"\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend 1336b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<'\z([^']*\)'\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart nextgroup=rubyFunction fold keepend 1346b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<`\z([^`]*\)`\ze+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial nextgroup=rubyFunction fold keepend 1356b730e11SBram Moolenaar 1366b730e11SBram 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 1376b730e11SBram 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 1386b730e11SBram Moolenaarsyn region rubyString start=+\%(\%(class\s*\|\%(\.\|::\)\)\_s*\)\@<!<<-'\z([^']*\)'\ze+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart nextgroup=rubyFunction fold keepend 1396b730e11SBram 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 1406b730e11SBram Moolenaar 1416b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby' 142*d5cdbeb8SBram Moolenaar let b:ruby_no_expensive = 1 1436b730e11SBram Moolenaarend 144071d4279SBram Moolenaar 145071d4279SBram Moolenaar" Expensive Mode - colorize *end* according to opening statement 146*d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive") 147*d5cdbeb8SBram Moolenaar syn region rubyFunction matchgroup=rubyDefine start="\<def\s\+" end="\%(\s*\%(\s\|(\|;\|$\|#\)\)\@=" oneline 148*d5cdbeb8SBram Moolenaar syn region rubyClass matchgroup=rubyDefine start="\<class\s\+" end="\%(\s*\%(\s\|<\|;\|$\|#\)\)\@=" oneline 1496b730e11SBram Moolenaar syn match rubyDefine "\<class\ze<<" 150*d5cdbeb8SBram Moolenaar syn region rubyModule matchgroup=rubyDefine start="\<module\s\+" end="\%(\s*\%(\s\|;\|$\|#\)\)\@=" oneline 151071d4279SBram Moolenaar 1526b730e11SBram Moolenaar syn region rubyBlock start="\<def\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyFunction fold 1536b730e11SBram Moolenaar syn region rubyBlock start="\<class\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyClass fold 1546b730e11SBram Moolenaar syn region rubyBlock start="\<module\>" matchgroup=rubyDefine end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo nextgroup=rubyModule fold 155071d4279SBram Moolenaar 1566b730e11SBram Moolenaar " modifiers 1576b730e11SBram Moolenaar syn match rubyControl "\<\%(if\|unless\|while\|until\)\>" display 158071d4279SBram Moolenaar 159071d4279SBram Moolenaar " *do* requiring *end* 1606b730e11SBram Moolenaar syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold 161071d4279SBram Moolenaar 162071d4279SBram Moolenaar " *{* requiring *}* 1636b730e11SBram Moolenaar syn region rubyCurlyBlock start="{" end="}" contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo fold 164071d4279SBram Moolenaar 165071d4279SBram Moolenaar " statements without *do* 1666b730e11SBram 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* 1691e015460SBram Moolenaar syn region rubyOptDoLine matchgroup=rubyControl start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[?:,;=([<>~\*/%!&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" end="\%(\<do\>\|:\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyExtendedStringSpecial,rubyTodo 1701e015460SBram Moolenaar syn region rubyOptDoBlock start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\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 1776b730e11SBram Moolenaarelse 1786b730e11SBram Moolenaar syn region rubyFunction matchgroup=rubyControl start="\<def\s\+" end="\ze\%(\s\|(\|;\|$\)" oneline 1796b730e11SBram Moolenaar syn region rubyClass matchgroup=rubyControl start="\<class\s\+" end="\ze\%(\s\|<\|;\|$\)" oneline 1806b730e11SBram Moolenaar syn match rubyControl "\<class\ze<<" 1816b730e11SBram 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 1836b730e11SBram Moolenaarendif 184071d4279SBram Moolenaar 185071d4279SBram Moolenaar" Keywords 1866b730e11SBram Moolenaar" Note: the following keywords have already been defined: 1876b730e11SBram Moolenaar" begin case class def do end for if module unless until while 1886b730e11SBram Moolenaarsyn keyword rubyControl and break else elsif ensure in next not or redo rescue retry return then when 1896b730e11SBram Moolenaarsyn match rubyOperator "\<defined?" display 1906b730e11SBram Moolenaarsyn keyword rubyKeyword alias super undef yield 1916b730e11SBram Moolenaarsyn keyword rubyBoolean true false 1926b730e11SBram Moolenaarsyn keyword rubyPseudoVariable nil self __FILE__ __LINE__ 193071d4279SBram Moolenaarsyn keyword rubyBeginEnd BEGIN END 194071d4279SBram Moolenaar 1956b730e11SBram Moolenaar" Special Methods 1966b730e11SBram Moolenaarif !exists("ruby_no_special_methods") 1976b730e11SBram Moolenaar syn keyword rubyAccess public protected private 1986b730e11SBram Moolenaar syn keyword rubyAttribute attr attr_accessor attr_reader attr_writer 1991e015460SBram Moolenaar syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>\)" 2006b730e11SBram Moolenaar syn keyword rubyEval eval class_eval instance_eval module_eval 2016b730e11SBram Moolenaar syn keyword rubyException raise fail catch throw 2026b730e11SBram Moolenaar syn keyword rubyInclude autoload extend include load require 2036b730e11SBram Moolenaar syn keyword rubyKeyword callcc caller lambda proc 204071d4279SBram Moolenaarendif 205071d4279SBram Moolenaar 2066b730e11SBram Moolenaar" Comments and Documentation 2076b730e11SBram Moolenaarsyn match rubySharpBang "\%^#!.*" display 2086b730e11SBram Moolenaarsyn keyword rubyTodo FIXME NOTE TODO XXX contained 2096b730e11SBram Moolenaarsyn match rubyComment "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell 2106b730e11SBram Moolenaarsyn region rubyDocumentation start="^=begin" end="^=end.*$" contains=rubySpaceError,rubyTodo,@Spell fold 2116b730e11SBram Moolenaar 2126b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver 2136b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>" transparent contains=NONE 2146b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>" transparent contains=NONE 2156b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>" transparent contains=NONE 2166b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>" transparent contains=NONE 2176b730e11SBram Moolenaar 2186b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>" transparent contains=NONE 2196b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>" transparent contains=NONE 2206b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE 2216b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>" transparent contains=NONE 2226b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|private\|proc\|protected\)\>" transparent contains=NONE 2236b730e11SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|raise\|throw\|trap\)\>" transparent contains=NONE 224071d4279SBram Moolenaar 225071d4279SBram Moolenaar" __END__ Directive 2266b730e11SBram 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 2436b730e11SBram Moolenaar HiLink rubyInteger Number 2446b730e11SBram Moolenaar HiLink rubyASCIICode rubyInteger 2456b730e11SBram Moolenaar HiLink rubyFloat Float 2466b730e11SBram Moolenaar HiLink rubyBoolean rubyPseudoVariable 247071d4279SBram Moolenaar HiLink rubyException Exception 2486b730e11SBram Moolenaar HiLink rubyClass Type 2496b730e11SBram Moolenaar HiLink rubyModule Type 2506b730e11SBram Moolenaar if !exists("ruby_no_identifiers") 251071d4279SBram Moolenaar HiLink rubyIdentifier Identifier 2526b730e11SBram Moolenaar else 2536b730e11SBram Moolenaar HiLink rubyIdentifier NONE 2546b730e11SBram Moolenaar endif 255071d4279SBram Moolenaar HiLink rubyClassVariable rubyIdentifier 256071d4279SBram Moolenaar HiLink rubyConstant rubyIdentifier 257071d4279SBram Moolenaar HiLink rubyGlobalVariable rubyIdentifier 2586b730e11SBram 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 2656b730e11SBram Moolenaar HiLink rubyOperator Operator 266071d4279SBram Moolenaar HiLink rubyBeginEnd Statement 2676b730e11SBram Moolenaar HiLink rubyAccess Statement 2686b730e11SBram Moolenaar HiLink rubyAttribute Statement 2696b730e11SBram Moolenaar HiLink rubyEval Statement 2706b730e11SBram Moolenaar HiLink rubyPseudoVariable Constant 271071d4279SBram Moolenaar 272071d4279SBram Moolenaar HiLink rubyComment Comment 273071d4279SBram Moolenaar HiLink rubyData Comment 274071d4279SBram Moolenaar HiLink rubyDataDirective Delimiter 2756b730e11SBram Moolenaar HiLink rubyDocumentation Comment 2766b730e11SBram Moolenaar HiLink rubyEscape Special 2776b730e11SBram Moolenaar HiLink rubyInterpolation Special 2786b730e11SBram Moolenaar HiLink rubyNoInterpolation rubyString 2796b730e11SBram Moolenaar HiLink rubySharpBang PreProc 2806b730e11SBram Moolenaar HiLink rubyStringDelimiter Delimiter 2816b730e11SBram Moolenaar HiLink rubyString String 2826b730e11SBram Moolenaar HiLink rubyTodo Todo 2836b730e11SBram Moolenaar 2846b730e11SBram Moolenaar HiLink rubyError Error 2856b730e11SBram Moolenaar HiLink rubySpaceError rubyError 286071d4279SBram Moolenaar 287071d4279SBram Moolenaar delcommand HiLink 288071d4279SBram Moolenaarendif 289071d4279SBram Moolenaar 290071d4279SBram Moolenaarlet b:current_syntax = "ruby" 291071d4279SBram Moolenaar 2926b730e11SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 ff=unix: 293