1071d4279SBram Moolenaar" Vim syntax file 2071d4279SBram Moolenaar" Language: Ruby 3c6249bb2SBram Moolenaar" Maintainer: Doug Kearns <[email protected]> 4ec7944aaSBram Moolenaar" URL: https://github.com/vim-ruby/vim-ruby 5c6249bb2SBram Moolenaar" Release Coordinator: Doug Kearns <[email protected]> 6*d09091d4SBram Moolenaar" Last Change: 2018 Jul 09 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 1389bcfda6SBram Moolenaar" Prelude {{{1 14c1762ccbSBram Moolenaarif exists("b:current_syntax") 15071d4279SBram Moolenaar finish 16071d4279SBram Moolenaarendif 17071d4279SBram Moolenaar 1889bcfda6SBram Moolenaar" this file uses line continuations 1989bcfda6SBram Moolenaarlet s:cpo_sav = &cpo 2089bcfda6SBram Moolenaarset cpo&vim 2189bcfda6SBram Moolenaar 2289bcfda6SBram Moolenaar" Folding Config {{{1 236b730e11SBram Moolenaarif has("folding") && exists("ruby_fold") 246b730e11SBram Moolenaar setlocal foldmethod=syntax 256b730e11SBram Moolenaarendif 266b730e11SBram Moolenaar 2789bcfda6SBram Moolenaarlet s:foldable_groups = split( 2889bcfda6SBram Moolenaar \ get( 2989bcfda6SBram Moolenaar \ b:, 3089bcfda6SBram Moolenaar \ 'ruby_foldable_groups', 3189bcfda6SBram Moolenaar \ get(g:, 'ruby_foldable_groups', 'ALL') 3289bcfda6SBram Moolenaar \ ) 3389bcfda6SBram Moolenaar \ ) 3489bcfda6SBram Moolenaar 3589bcfda6SBram Moolenaarfunction! s:foldable(...) abort 3689bcfda6SBram Moolenaar if index(s:foldable_groups, 'ALL') > -1 3789bcfda6SBram Moolenaar return 1 3889bcfda6SBram Moolenaar endif 3989bcfda6SBram Moolenaar 4089bcfda6SBram Moolenaar for l:i in a:000 4189bcfda6SBram Moolenaar if index(s:foldable_groups, l:i) > -1 4289bcfda6SBram Moolenaar return 1 4389bcfda6SBram Moolenaar endif 4489bcfda6SBram Moolenaar endfor 4589bcfda6SBram Moolenaar 4689bcfda6SBram Moolenaar return 0 4789bcfda6SBram Moolenaarendfunction " }}} 4889bcfda6SBram Moolenaar 49*d09091d4SBram Moolenaarsyn cluster rubyNotTop contains=@rubyExtendedStringSpecial,@rubyRegexpSpecial,@rubyDeclaration,rubyConditional,rubyExceptional,rubyMethodExceptional,rubyTodo,rubyModuleName,rubyClassName,rubySymbolDelimiter 50c236c16dSBram Moolenaar 5189bcfda6SBram Moolenaar" Whitespace Errors {{{1 526b730e11SBram Moolenaarif exists("ruby_space_errors") 536b730e11SBram Moolenaar if !exists("ruby_no_trail_space_error") 546b730e11SBram Moolenaar syn match rubySpaceError display excludenl "\s\+$" 556b730e11SBram Moolenaar endif 566b730e11SBram Moolenaar if !exists("ruby_no_tab_space_error") 576b730e11SBram Moolenaar syn match rubySpaceError display " \+\t"me=e-1 586b730e11SBram Moolenaar endif 596b730e11SBram Moolenaarendif 606b730e11SBram Moolenaar 6189bcfda6SBram Moolenaar" Operators {{{1 629964e468SBram Moolenaarif exists("ruby_operators") 6389bcfda6SBram Moolenaar syn match rubyOperator "[~!^|*/%+-]\|&\.\@!\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@1<!>\|\*\*\|\.\.\.\|\.\.\|::" 64ec7944aaSBram Moolenaar syn match rubyOperator "->\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!=" 6589bcfda6SBram Moolenaar syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\w[?!]\=\|[]})]\)\@2<=\[\s*" end="\s*]" contains=ALLBUT,@rubyNotTop 669964e468SBram Moolenaarendif 679964e468SBram Moolenaar 6889bcfda6SBram Moolenaar" Expression Substitution and Backslash Notation {{{1 69c236c16dSBram Moolenaarsyn match rubyStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display 70c236c16dSBram Moolenaarsyn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display 711d68952aSBram Moolenaarsyn match rubyQuoteEscape "\\[\\']" contained display 729964e468SBram Moolenaar 73c236c16dSBram Moolenaarsyn region rubyInterpolation matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop 749964e468SBram Moolenaarsyn match rubyInterpolation "#\%(\$\|@@\=\)\w\+" display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable,rubyPredefinedVariable 759964e468SBram Moolenaarsyn match rubyInterpolationDelimiter "#\ze\%(\$\|@@\=\)\w\+" display contained 76c1762ccbSBram Moolenaarsyn match rubyInterpolation "#\$\%(-\w\|\W\)" display contained contains=rubyInterpolationDelimiter,rubyPredefinedVariable,rubyInvalidVariable 77c1762ccbSBram Moolenaarsyn match rubyInterpolationDelimiter "#\ze\$\%(-\w\|\W\)" display contained 789964e468SBram Moolenaarsyn region rubyNoInterpolation start="\\#{" end="}" contained 799964e468SBram Moolenaarsyn match rubyNoInterpolation "\\#{" display contained 809964e468SBram Moolenaarsyn match rubyNoInterpolation "\\#\%(\$\|@@\=\)\w\+" display contained 81c1762ccbSBram Moolenaarsyn match rubyNoInterpolation "\\#\$\W" display contained 826b730e11SBram Moolenaar 8389bcfda6SBram Moolenaarsyn match rubyDelimiterEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE 846b730e11SBram Moolenaar 85c236c16dSBram Moolenaarsyn region rubyNestedParentheses start="(" skip="\\\\\|\\)" matchgroup=rubyString end=")" transparent contained 86c236c16dSBram Moolenaarsyn region rubyNestedCurlyBraces start="{" skip="\\\\\|\\}" matchgroup=rubyString end="}" transparent contained 87c236c16dSBram Moolenaarsyn region rubyNestedAngleBrackets start="<" skip="\\\\\|\\>" matchgroup=rubyString end=">" transparent contained 88c236c16dSBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" matchgroup=rubyString end="\]" transparent contained 896b730e11SBram Moolenaar 9089bcfda6SBram Moolenaar" Regular Expression Metacharacters {{{1 91c236c16dSBram Moolenaar" These are mostly Oniguruma ready 92c236c16dSBram Moolenaarsyn region rubyRegexpComment matchgroup=rubyRegexpSpecial start="(?#" skip="\\)" end=")" contained 93c236c16dSBram Moolenaarsyn region rubyRegexpParens matchgroup=rubyRegexpSpecial start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\)" end=")" contained transparent contains=@rubyRegexpSpecial 94c236c16dSBram Moolenaarsyn region rubyRegexpBrackets matchgroup=rubyRegexpCharClass start="\[\^\=" skip="\\\]" end="\]" contained transparent contains=rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass oneline 95c236c16dSBram Moolenaarsyn match rubyRegexpCharClass "\\[DdHhSsWw]" contained display 96c236c16dSBram Moolenaarsyn match rubyRegexpCharClass "\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\):\]" contained 971d68952aSBram Moolenaarsyn match rubyRegexpEscape "\\[].*?+^$|\\/(){}[]" contained 98c236c16dSBram Moolenaarsyn match rubyRegexpQuantifier "[*?+][?+]\=" contained display 99c236c16dSBram Moolenaarsyn match rubyRegexpQuantifier "{\d\+\%(,\d*\)\=}?\=" contained display 100c236c16dSBram Moolenaarsyn match rubyRegexpAnchor "[$^]\|\\[ABbGZz]" contained display 101c236c16dSBram Moolenaarsyn match rubyRegexpDot "\." contained display 102c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "|" contained display 103c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\[1-9]\d\=\d\@!" contained display 104c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display 105c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display 106c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\g<\%([a-z_]\w*\|-\=\d\+\)>" contained display 107c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\g'\%([a-z_]\w*\|-\=\d\+\)'" contained display 108c236c16dSBram Moolenaar 109c236c16dSBram Moolenaarsyn cluster rubyStringSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape 1106b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets 111c236c16dSBram Moolenaarsyn cluster rubyRegexpSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment 112071d4279SBram Moolenaar 11389bcfda6SBram Moolenaar" Numbers and ASCII Codes {{{1 11489bcfda6SBram Moolenaarsyn match rubyASCIICode "\%(\w\|[]})\"'/]\)\@1<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)" 11589bcfda6SBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*r\=i\=\>" display 11689bcfda6SBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)r\=i\=\>" display 11789bcfda6SBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*r\=i\=\>" display 11889bcfda6SBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*r\=i\=\>" display 11989bcfda6SBram Moolenaarsyn match rubyFloat "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*r\=i\=\>" display 12089bcfda6SBram Moolenaarsyn match rubyFloat "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)r\=i\=\>" display 121071d4279SBram Moolenaar 12289bcfda6SBram Moolenaar" Identifiers {{{1 1236b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent 1246b730e11SBram Moolenaarsyn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent 125071d4279SBram Moolenaar 126*d09091d4SBram Moolenaarsyn match rubyClassName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained 127*d09091d4SBram Moolenaarsyn match rubyModuleName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained 12889bcfda6SBram Moolenaarsyn match rubyConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" 129ec7944aaSBram Moolenaarsyn match rubyClassVariable "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display 130ec7944aaSBram Moolenaarsyn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display 131ec7944aaSBram Moolenaarsyn match rubyGlobalVariable "$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)" 132*d09091d4SBram Moolenaarsyn match rubySymbolDelimiter ":" contained 133*d09091d4SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!:\%(\^\|\~@\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!@\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" contains=rubySymbolDelimiter 134*d09091d4SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" contains=rubySymbolDelimiter 135*d09091d4SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contains=rubySymbolDelimiter 136*d09091d4SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\=" contains=rubySymbolDelimiter 13789bcfda6SBram Moolenaar 13889bcfda6SBram Moolenaarif s:foldable(':') 139*d09091d4SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape fold 140*d09091d4SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold 14189bcfda6SBram Moolenaarelse 142*d09091d4SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape 143*d09091d4SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial 14489bcfda6SBram Moolenaarendif 14589bcfda6SBram Moolenaar 14689bcfda6SBram Moolenaarsyn match rubyCapitalizedMethod "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)*\s*(\@=" 147071d4279SBram Moolenaar 148ec7944aaSBram Moolenaarsyn match rubyBlockParameter "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contained 14989bcfda6SBram Moolenaarsyn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\_s*\)\@32<=|" end="|" oneline display contains=rubyBlockParameter 150c1762ccbSBram Moolenaar 151c236c16dSBram Moolenaarsyn match rubyInvalidVariable "$[^ A-Za-z_-]" 152ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~]# 153ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable "$\d\+" display 1546b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>" display 1556b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display 1566b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display 1571e015460SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display 15889bcfda6SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(ARGF\|ARGV\|ENV\|DATA\|FALSE\|NIL\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!" 15989bcfda6SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!" 160071d4279SBram Moolenaar 16189bcfda6SBram Moolenaar" Normal Regular Expression {{{1 16289bcfda6SBram Moolenaarif s:foldable('/') 16389bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold 164*d09091d4SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/\%([ \t=]\|$\)\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold 16589bcfda6SBram Moolenaarelse 16689bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial 167*d09091d4SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/\%([ \t=]\|$\)\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial 16889bcfda6SBram Moolenaarendif 169c236c16dSBram Moolenaar 17089bcfda6SBram Moolenaar" Generalized Regular Expression {{{1 17189bcfda6SBram Moolenaarif s:foldable('%') 172c236c16dSBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold 173c236c16dSBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{" end="}[iomxneus]*" skip="\\\\\|\\}" contains=@rubyRegexpSpecial fold 17489bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<" end=">[iomxneus]*" skip="\\\\\|\\>" contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape fold 175c236c16dSBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\[" end="\][iomxneus]*" skip="\\\\\|\\\]" contains=@rubyRegexpSpecial fold 176c236c16dSBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r(" end=")[iomxneus]*" skip="\\\\\|\\)" contains=@rubyRegexpSpecial fold 17789bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z(\s\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold 17889bcfda6SBram Moolenaarelse 17989bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial 18089bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{" end="}[iomxneus]*" skip="\\\\\|\\}" contains=@rubyRegexpSpecial 18189bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<" end=">[iomxneus]*" skip="\\\\\|\\>" contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape 18289bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\[" end="\][iomxneus]*" skip="\\\\\|\\\]" contains=@rubyRegexpSpecial 18389bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r(" end=")[iomxneus]*" skip="\\\\\|\\)" contains=@rubyRegexpSpecial 18489bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z(\s\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial 18589bcfda6SBram Moolenaarendif 1866b730e11SBram Moolenaar 18789bcfda6SBram Moolenaar" Normal String {{{1 18889bcfda6SBram Moolenaarlet s:spell_cluster = exists('ruby_spellcheck_strings') ? ',@Spell' : '' 18989bcfda6SBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" ' . 19089bcfda6SBram Moolenaar \ (s:foldable('%') ? 'fold' : '') . ' contains=@rubyStringSpecial' . s:spell_cluster 19189bcfda6SBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="''" end="''" skip="\\\\\|\\''" ' . 19289bcfda6SBram Moolenaar \ (s:foldable('%') ? 'fold' : '') . ' contains=rubyQuoteEscape' . s:spell_cluster 19389bcfda6SBram Moolenaar 19489bcfda6SBram Moolenaar" Shell Command Output {{{1 19589bcfda6SBram Moolenaarif s:foldable('%') 1969964e468SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial fold 19789bcfda6SBram Moolenaarelse 19889bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial 19989bcfda6SBram Moolenaarendif 2006b730e11SBram Moolenaar 20189bcfda6SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings {{{1 20289bcfda6SBram Moolenaarif s:foldable('%') 20389bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold 20489bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape 20589bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape 20689bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape 20789bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimiterEscape 20889bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" fold 209ec7944aaSBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold 21089bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape 21189bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape 21289bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape 21389bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s(" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimiterEscape 21489bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" fold 21589bcfda6SBram Moolenaarelse 21689bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" 21789bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{" end="}" skip="\\\\\|\\}" contains=rubyNestedCurlyBraces,rubyDelimiterEscape 21889bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<" end=">" skip="\\\\\|\\>" contains=rubyNestedAngleBrackets,rubyDelimiterEscape 21989bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\[" end="\]" skip="\\\\\|\\\]" contains=rubyNestedSquareBrackets,rubyDelimiterEscape 22089bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw](" end=")" skip="\\\\\|\\)" contains=rubyNestedParentheses,rubyDelimiterEscape 22189bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" 22289bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" 22389bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{" end="}" skip="\\\\\|\\}" contains=rubyNestedCurlyBraces,rubyDelimiterEscape 22489bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<" end=">" skip="\\\\\|\\>" contains=rubyNestedAngleBrackets,rubyDelimiterEscape 22589bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\[" end="\]" skip="\\\\\|\\\]" contains=rubyNestedSquareBrackets,rubyDelimiterEscape 22689bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s(" end=")" skip="\\\\\|\\)" contains=rubyNestedParentheses,rubyDelimiterEscape 22789bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" 22889bcfda6SBram Moolenaarendif 2296b730e11SBram Moolenaar 23089bcfda6SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output {{{1 2316b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string 23289bcfda6SBram Moolenaarif s:foldable('%') 2336b730e11SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 23489bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 23589bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape fold 23689bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape fold 23789bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape fold 23889bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape fold 23989bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx]\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 24089bcfda6SBram Moolenaarelse 24189bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial 24289bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial 24389bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape 24489bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape 24589bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape 24689bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape 24789bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx]\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial 24889bcfda6SBram Moolenaarendif 249071d4279SBram Moolenaar 25089bcfda6SBram Moolenaar" Array of Symbols {{{1 25189bcfda6SBram Moolenaarif s:foldable('%') 25289bcfda6SBram Moolenaar " Array of Symbols 25389bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold 25489bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape 25589bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape 25689bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape 25789bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i(" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimiterEscape 258071d4279SBram Moolenaar 25989bcfda6SBram Moolenaar " Array of interpolated Symbols 26089bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 26189bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I{" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape fold 26289bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape fold 26389bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape fold 26489bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape fold 26589bcfda6SBram Moolenaarelse 26689bcfda6SBram Moolenaar " Array of Symbols 26789bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" 26889bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i{" end="}" skip="\\\\\|\\}" contains=rubyNestedCurlyBraces,rubyDelimiterEscape 26989bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i<" end=">" skip="\\\\\|\\>" contains=rubyNestedAngleBrackets,rubyDelimiterEscape 27089bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\[" end="\]" skip="\\\\\|\\\]" contains=rubyNestedSquareBrackets,rubyDelimiterEscape 27189bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i(" end=")" skip="\\\\\|\\)" contains=rubyNestedParentheses,rubyDelimiterEscape 2726b730e11SBram Moolenaar 27389bcfda6SBram Moolenaar " Array of interpolated Symbols 27489bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial 27589bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I{" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape 27689bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape 27789bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape 27889bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape 27989bcfda6SBram Moolenaarendif 2806b730e11SBram Moolenaar 28189bcfda6SBram Moolenaar" Here Document {{{1 282*d09091d4SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 283*d09091d4SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 284*d09091d4SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 285*d09091d4SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 28689bcfda6SBram Moolenaar 28789bcfda6SBram Moolenaarif s:foldable('<<') 28889bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend 28989bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend 29089bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc fold keepend 29189bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend 29289bcfda6SBram Moolenaar 29389bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend 29489bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend 29589bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart fold keepend 29689bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend 29789bcfda6SBram Moolenaarelse 29889bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend 29989bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend 30089bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc keepend 30189bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend 30289bcfda6SBram Moolenaar 30389bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 30489bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 30589bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart keepend 30689bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 30789bcfda6SBram Moolenaarendif 30889bcfda6SBram Moolenaar 30989bcfda6SBram Moolenaar" eRuby Config {{{1 3106b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby' 311d5cdbeb8SBram Moolenaar let b:ruby_no_expensive = 1 312*d09091d4SBram Moolenaarendif 313071d4279SBram Moolenaar 31489bcfda6SBram Moolenaar" Module, Class, Method and Alias Declarations {{{1 3159964e468SBram Moolenaarsyn match rubyAliasDeclaration "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable nextgroup=rubyAliasDeclaration2 skipwhite 3169964e468SBram Moolenaarsyn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable 3179964e468SBram Moolenaarsyn match rubyMethodDeclaration "[^[:space:];#(]\+" contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable 318*d09091d4SBram Moolenaarsyn match rubyClassDeclaration "[^[:space:];#<]\+" contained contains=rubyClassName,rubyOperator 319*d09091d4SBram Moolenaarsyn match rubyModuleDeclaration "[^[:space:];#<]\+" contained contains=rubyModuleName,rubyOperator 320*d09091d4SBram Moolenaarsyn match rubyMethodName "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration 321*d09091d4SBram Moolenaarsyn match rubyMethodName "\%(\s\|^\)\@1<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2 322*d09091d4SBram Moolenaarsyn match rubyMethodName "\%([[:space:].]\|^\)\@2<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration 323c1762ccbSBram Moolenaar 324*d09091d4SBram Moolenaarsyn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyMethodName,rubyBlockParameter 325c236c16dSBram Moolenaar 32689bcfda6SBram Moolenaar" Keywords {{{1 3271d68952aSBram Moolenaar" Note: the following keywords have already been defined: 3281d68952aSBram Moolenaar" begin case class def do end for if module unless until while 3291d68952aSBram Moolenaarsyn match rubyControl "\<\%(and\|break\|in\|next\|not\|or\|redo\|rescue\|retry\|return\)\>[?!]\@!" 3301d68952aSBram Moolenaarsyn match rubyOperator "\<defined?" display 3311d68952aSBram Moolenaarsyn match rubyKeyword "\<\%(super\|yield\)\>[?!]\@!" 3321d68952aSBram Moolenaarsyn match rubyBoolean "\<\%(true\|false\)\>[?!]\@!" 33389bcfda6SBram Moolenaarsyn match rubyPseudoVariable "\<\%(nil\|self\|__ENCODING__\|__dir__\|__FILE__\|__LINE__\|__callee__\|__method__\)\>[?!]\@!" " TODO: reorganise 3341d68952aSBram Moolenaarsyn match rubyBeginEnd "\<\%(BEGIN\|END\)\>[?!]\@!" 3351d68952aSBram Moolenaar 33689bcfda6SBram Moolenaar" Expensive Mode {{{1 33789bcfda6SBram Moolenaar" Match 'end' with the appropriate opening keyword for syntax based folding 33889bcfda6SBram Moolenaar" and special highlighting of module/class/method definitions 339d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive") 3409964e468SBram Moolenaar syn match rubyDefine "\<alias\>" nextgroup=rubyAliasDeclaration skipwhite skipnl 3419964e468SBram Moolenaar syn match rubyDefine "\<def\>" nextgroup=rubyMethodDeclaration skipwhite skipnl 342*d09091d4SBram Moolenaar syn match rubyDefine "\<undef\>" nextgroup=rubyMethodName skipwhite skipnl 3439964e468SBram Moolenaar syn match rubyClass "\<class\>" nextgroup=rubyClassDeclaration skipwhite skipnl 3449964e468SBram Moolenaar syn match rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl 3451d68952aSBram Moolenaar 34689bcfda6SBram Moolenaar if s:foldable('def') 3471d68952aSBram Moolenaar syn region rubyMethodBlock start="\<def\>" matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold 34889bcfda6SBram Moolenaar else 34989bcfda6SBram Moolenaar syn region rubyMethodBlock start="\<def\>" matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop 35089bcfda6SBram Moolenaar endif 35189bcfda6SBram Moolenaar 35289bcfda6SBram Moolenaar if s:foldable('class') 353c236c16dSBram Moolenaar syn region rubyBlock start="\<class\>" matchgroup=rubyClass end="\<end\>" contains=ALLBUT,@rubyNotTop fold 35489bcfda6SBram Moolenaar else 35589bcfda6SBram Moolenaar syn region rubyBlock start="\<class\>" matchgroup=rubyClass end="\<end\>" contains=ALLBUT,@rubyNotTop 35689bcfda6SBram Moolenaar endif 35789bcfda6SBram Moolenaar 35889bcfda6SBram Moolenaar if s:foldable('module') 359c236c16dSBram Moolenaar syn region rubyBlock start="\<module\>" matchgroup=rubyModule end="\<end\>" contains=ALLBUT,@rubyNotTop fold 36089bcfda6SBram Moolenaar else 36189bcfda6SBram Moolenaar syn region rubyBlock start="\<module\>" matchgroup=rubyModule end="\<end\>" contains=ALLBUT,@rubyNotTop 36289bcfda6SBram Moolenaar endif 363071d4279SBram Moolenaar 3646b730e11SBram Moolenaar " modifiers 36589bcfda6SBram Moolenaar syn match rubyLineContinuation "\\$" nextgroup=rubyConditionalModifier,rubyRepeatModifier skipwhite skipnl 36689bcfda6SBram Moolenaar syn match rubyConditionalModifier "\<\%(if\|unless\)\>" 36789bcfda6SBram Moolenaar syn match rubyRepeatModifier "\<\%(while\|until\)\>" 368071d4279SBram Moolenaar 36989bcfda6SBram Moolenaar if s:foldable('do') 370c236c16dSBram Moolenaar syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold 37189bcfda6SBram Moolenaar else 37289bcfda6SBram Moolenaar syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyNotTop 37389bcfda6SBram Moolenaar endif 37489bcfda6SBram Moolenaar 375c1762ccbSBram Moolenaar " curly bracket block or hash literal 37689bcfda6SBram Moolenaar if s:foldable('{') 377ec7944aaSBram Moolenaar syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop fold 37889bcfda6SBram Moolenaar else 37989bcfda6SBram Moolenaar syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop 38089bcfda6SBram Moolenaar endif 38189bcfda6SBram Moolenaar 38289bcfda6SBram Moolenaar if s:foldable('[') 383c236c16dSBram Moolenaar syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold 38489bcfda6SBram Moolenaar endif 385071d4279SBram Moolenaar 386c1762ccbSBram Moolenaar " statements without 'do' 38789bcfda6SBram Moolenaar if s:foldable('begin') 388c236c16dSBram Moolenaar syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold 38989bcfda6SBram Moolenaar else 39089bcfda6SBram Moolenaar syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop 39189bcfda6SBram Moolenaar endif 39289bcfda6SBram Moolenaar 39389bcfda6SBram Moolenaar if s:foldable('case') 394c236c16dSBram Moolenaar syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold 39589bcfda6SBram Moolenaar else 39689bcfda6SBram Moolenaar syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@rubyNotTop 39789bcfda6SBram Moolenaar endif 39889bcfda6SBram Moolenaar 39989bcfda6SBram Moolenaar if s:foldable('if') 40089bcfda6SBram Moolenaar syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@1<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold 40189bcfda6SBram Moolenaar else 40289bcfda6SBram Moolenaar syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@1<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop 40389bcfda6SBram Moolenaar endif 404071d4279SBram Moolenaar 405c236c16dSBram Moolenaar syn match rubyConditional "\<\%(then\|else\|when\)\>[?!]\@!" contained containedin=rubyCaseExpression 406c236c16dSBram Moolenaar syn match rubyConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=rubyConditionalExpression 407c1762ccbSBram Moolenaar 4081d68952aSBram Moolenaar syn match rubyExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyBlockExpression 4091d68952aSBram Moolenaar syn match rubyMethodExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyMethodBlock 4101d68952aSBram Moolenaar 411c1762ccbSBram Moolenaar " statements with optional 'do' 412c236c16dSBram Moolenaar syn region rubyOptionalDoLine matchgroup=rubyRepeat start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyOptionalDo end="\%(\<do\>\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop 41389bcfda6SBram Moolenaar 41489bcfda6SBram Moolenaar if s:foldable('for') 415c236c16dSBram Moolenaar syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine fold 41689bcfda6SBram Moolenaar else 41789bcfda6SBram Moolenaar syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine 41889bcfda6SBram Moolenaar endif 419071d4279SBram Moolenaar 420071d4279SBram Moolenaar if !exists("ruby_minlines") 421ec7944aaSBram Moolenaar let ruby_minlines = 500 422071d4279SBram Moolenaar endif 423071d4279SBram Moolenaar exec "syn sync minlines=" . ruby_minlines 424071d4279SBram Moolenaar 4256b730e11SBram Moolenaarelse 426c236c16dSBram Moolenaar syn match rubyControl "\<def\>[?!]\@!" nextgroup=rubyMethodDeclaration skipwhite skipnl 427c236c16dSBram Moolenaar syn match rubyControl "\<class\>[?!]\@!" nextgroup=rubyClassDeclaration skipwhite skipnl 428c236c16dSBram Moolenaar syn match rubyControl "\<module\>[?!]\@!" nextgroup=rubyModuleDeclaration skipwhite skipnl 4291d68952aSBram Moolenaar syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|ensure\|then\|when\|end\)\>[?!]\@!" 430c236c16dSBram Moolenaar syn match rubyKeyword "\<\%(alias\|undef\)\>[?!]\@!" 4316b730e11SBram Moolenaarendif 432071d4279SBram Moolenaar 43389bcfda6SBram Moolenaar" Special Methods {{{1 4346b730e11SBram Moolenaarif !exists("ruby_no_special_methods") 435ec7944aaSBram Moolenaar syn keyword rubyAccess public protected private public_class_method private_class_method public_constant private_constant module_function 436c236c16dSBram Moolenaar " attr is a common variable name 437c236c16dSBram Moolenaar syn match rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!" 438c236c16dSBram Moolenaar syn keyword rubyAttribute attr_accessor attr_reader attr_writer 439c236c16dSBram Moolenaar syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>[?!]\@!\)" 4406b730e11SBram Moolenaar syn keyword rubyEval eval class_eval instance_eval module_eval 4416b730e11SBram Moolenaar syn keyword rubyException raise fail catch throw 442*d09091d4SBram Moolenaar syn keyword rubyInclude autoload gem load require require_relative 4436b730e11SBram Moolenaar syn keyword rubyKeyword callcc caller lambda proc 444*d09091d4SBram Moolenaar " false positive with 'include?' 445*d09091d4SBram Moolenaar syn match rubyMacro "\<include\>[?!]\@!" 446*d09091d4SBram Moolenaar syn keyword rubyMacro extend prepend refine using 447*d09091d4SBram Moolenaar syn keyword rubyMacro alias_method define_method define_singleton_method remove_method undef_method 448071d4279SBram Moolenaarendif 449071d4279SBram Moolenaar 45089bcfda6SBram Moolenaar" Comments and Documentation {{{1 4516b730e11SBram Moolenaarsyn match rubySharpBang "\%^#!.*" display 45289bcfda6SBram Moolenaarsyn keyword rubyTodo FIXME NOTE TODO OPTIMIZE HACK REVIEW XXX todo contained 4536b730e11SBram Moolenaarsyn match rubyComment "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell 45489bcfda6SBram Moolenaarif !exists("ruby_no_comment_fold") && s:foldable('#') 45589bcfda6SBram Moolenaar syn region rubyMultilineComment start="^\s*#.*\n\%(^\s*#\)\@=" end="^\s*#.*\n\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend 456ec7944aaSBram Moolenaar syn region rubyDocumentation start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold 4579964e468SBram Moolenaarelse 4589964e468SBram Moolenaar syn region rubyDocumentation start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell 4599964e468SBram Moolenaarendif 4606b730e11SBram Moolenaar 46189bcfda6SBram Moolenaar" Keyword Nobbling {{{1 4626b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver 46389bcfda6SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@1<!\.\)\|::\)\_s*\%([_[:lower:]][_[:alnum:]]*\|\<\%(BEGIN\|END\)\>\)" transparent contains=NONE 46489bcfda6SBram Moolenaarsyn match rubyKeywordAsMethod "\(defined?\|exit!\)\@!\<[_[:lower:]][_[:alnum:]]*[?!]" transparent contains=NONE 4656b730e11SBram Moolenaar 46689bcfda6SBram Moolenaar" More Symbols {{{1 46789bcfda6SBram Moolenaarsyn match rubySymbol "\%([{(,]\_s*\)\zs\l\w*[!?]\=::\@!"he=e-1 468*d09091d4SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="he=e-1 46989bcfda6SBram Moolenaarsyn match rubySymbol "\%([{(,]\_s*\)\zs[[:space:],{]\l\w*[!?]\=::\@!"hs=s+1,he=e-1 47089bcfda6SBram Moolenaarsyn match rubySymbol "[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="hs=s+1,he=e-1 471c236c16dSBram Moolenaar 47289bcfda6SBram Moolenaar" __END__ Directive {{{1 47389bcfda6SBram Moolenaarif s:foldable('__END__') 4746b730e11SBram Moolenaar syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold 47589bcfda6SBram Moolenaarelse 47689bcfda6SBram Moolenaar syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" 47789bcfda6SBram Moolenaarendif 478071d4279SBram Moolenaar 47989bcfda6SBram Moolenaar" Default Highlighting {{{1 480c1762ccbSBram Moolenaarhi def link rubyClass rubyDefine 481c1762ccbSBram Moolenaarhi def link rubyModule rubyDefine 4821d68952aSBram Moolenaarhi def link rubyMethodExceptional rubyDefine 483c1762ccbSBram Moolenaarhi def link rubyDefine Define 484*d09091d4SBram Moolenaarhi def link rubyAccess rubyMacro 485*d09091d4SBram Moolenaarhi def link rubyAttribute rubyMacro 486*d09091d4SBram Moolenaarhi def link rubyMacro Macro 487*d09091d4SBram Moolenaarhi def link rubyMethodName rubyFunction 488c1762ccbSBram Moolenaarhi def link rubyFunction Function 489c1762ccbSBram Moolenaarhi def link rubyConditional Conditional 490c1762ccbSBram Moolenaarhi def link rubyConditionalModifier rubyConditional 4911d68952aSBram Moolenaarhi def link rubyExceptional rubyConditional 492c1762ccbSBram Moolenaarhi def link rubyRepeat Repeat 493c1762ccbSBram Moolenaarhi def link rubyRepeatModifier rubyRepeat 494c1762ccbSBram Moolenaarhi def link rubyOptionalDo rubyRepeat 495c1762ccbSBram Moolenaarhi def link rubyControl Statement 496c1762ccbSBram Moolenaarhi def link rubyInclude Include 497c1762ccbSBram Moolenaarhi def link rubyInteger Number 498c1762ccbSBram Moolenaarhi def link rubyASCIICode Character 499c1762ccbSBram Moolenaarhi def link rubyFloat Float 500c1762ccbSBram Moolenaarhi def link rubyBoolean Boolean 501c1762ccbSBram Moolenaarhi def link rubyException Exception 5026b730e11SBram Moolenaarif !exists("ruby_no_identifiers") 503c1762ccbSBram Moolenaar hi def link rubyIdentifier Identifier 5046b730e11SBram Moolenaarelse 505c1762ccbSBram Moolenaar hi def link rubyIdentifier NONE 5066b730e11SBram Moolenaarendif 507c1762ccbSBram Moolenaarhi def link rubyClassVariable rubyIdentifier 508c1762ccbSBram Moolenaarhi def link rubyConstant Type 509*d09091d4SBram Moolenaarhi def link rubyClassName rubyConstant 510*d09091d4SBram Moolenaarhi def link rubyModuleName rubyConstant 511c1762ccbSBram Moolenaarhi def link rubyGlobalVariable rubyIdentifier 512c1762ccbSBram Moolenaarhi def link rubyInstanceVariable rubyIdentifier 513c1762ccbSBram Moolenaarhi def link rubyPredefinedIdentifier rubyIdentifier 514c1762ccbSBram Moolenaarhi def link rubyPredefinedConstant rubyPredefinedIdentifier 515c1762ccbSBram Moolenaarhi def link rubyPredefinedVariable rubyPredefinedIdentifier 516c1762ccbSBram Moolenaarhi def link rubySymbol Constant 517c1762ccbSBram Moolenaarhi def link rubyKeyword Keyword 518c1762ccbSBram Moolenaarhi def link rubyOperator Operator 519c1762ccbSBram Moolenaarhi def link rubyBeginEnd Statement 520c1762ccbSBram Moolenaarhi def link rubyEval Statement 521c1762ccbSBram Moolenaarhi def link rubyPseudoVariable Constant 52289bcfda6SBram Moolenaarhi def link rubyCapitalizedMethod rubyLocalVariableOrMethod 523071d4279SBram Moolenaar 524c1762ccbSBram Moolenaarhi def link rubyComment Comment 525c1762ccbSBram Moolenaarhi def link rubyData Comment 526c1762ccbSBram Moolenaarhi def link rubyDataDirective Delimiter 527c1762ccbSBram Moolenaarhi def link rubyDocumentation Comment 528c236c16dSBram Moolenaarhi def link rubyTodo Todo 529c236c16dSBram Moolenaar 5301d68952aSBram Moolenaarhi def link rubyQuoteEscape rubyStringEscape 531c236c16dSBram Moolenaarhi def link rubyStringEscape Special 532c1762ccbSBram Moolenaarhi def link rubyInterpolationDelimiter Delimiter 533c1762ccbSBram Moolenaarhi def link rubyNoInterpolation rubyString 534c1762ccbSBram Moolenaarhi def link rubySharpBang PreProc 535c1762ccbSBram Moolenaarhi def link rubyRegexpDelimiter rubyStringDelimiter 53689bcfda6SBram Moolenaarhi def link rubySymbolDelimiter rubySymbol 537c1762ccbSBram Moolenaarhi def link rubyStringDelimiter Delimiter 538ec7944aaSBram Moolenaarhi def link rubyHeredoc rubyString 539c1762ccbSBram Moolenaarhi def link rubyString String 540c236c16dSBram Moolenaarhi def link rubyRegexpEscape rubyRegexpSpecial 541c236c16dSBram Moolenaarhi def link rubyRegexpQuantifier rubyRegexpSpecial 542c236c16dSBram Moolenaarhi def link rubyRegexpAnchor rubyRegexpSpecial 543c236c16dSBram Moolenaarhi def link rubyRegexpDot rubyRegexpCharClass 544c236c16dSBram Moolenaarhi def link rubyRegexpCharClass rubyRegexpSpecial 545c236c16dSBram Moolenaarhi def link rubyRegexpSpecial Special 546c236c16dSBram Moolenaarhi def link rubyRegexpComment Comment 547c236c16dSBram Moolenaarhi def link rubyRegexp rubyString 5486b730e11SBram Moolenaar 549c1762ccbSBram Moolenaarhi def link rubyInvalidVariable Error 550c1762ccbSBram Moolenaarhi def link rubyError Error 551c1762ccbSBram Moolenaarhi def link rubySpaceError rubyError 552071d4279SBram Moolenaar 55389bcfda6SBram Moolenaar" Postscript {{{1 554071d4279SBram Moolenaarlet b:current_syntax = "ruby" 555071d4279SBram Moolenaar 55689bcfda6SBram Moolenaarlet &cpo = s:cpo_sav 55789bcfda6SBram Moolenaarunlet! s:cpo_sav 55889bcfda6SBram Moolenaar 55989bcfda6SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: 560