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]> 66b730e11SBram Moolenaar" ---------------------------------------------------------------------------- 76b730e11SBram Moolenaar" 8071d4279SBram Moolenaar" Previous Maintainer: Mirko Nasato 9071d4279SBram Moolenaar" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN) 106b730e11SBram Moolenaar" ---------------------------------------------------------------------------- 11071d4279SBram Moolenaar 12*89bcfda6SBram Moolenaar" Prelude {{{1 13c1762ccbSBram Moolenaarif exists("b:current_syntax") 14071d4279SBram Moolenaar finish 15071d4279SBram Moolenaarendif 16071d4279SBram Moolenaar 17*89bcfda6SBram Moolenaar" this file uses line continuations 18*89bcfda6SBram Moolenaarlet s:cpo_sav = &cpo 19*89bcfda6SBram Moolenaarset cpo&vim 20*89bcfda6SBram Moolenaar 21*89bcfda6SBram Moolenaar" Folding Config {{{1 226b730e11SBram Moolenaarif has("folding") && exists("ruby_fold") 236b730e11SBram Moolenaar setlocal foldmethod=syntax 246b730e11SBram Moolenaarendif 256b730e11SBram Moolenaar 26*89bcfda6SBram Moolenaarlet s:foldable_groups = split( 27*89bcfda6SBram Moolenaar \ get( 28*89bcfda6SBram Moolenaar \ b:, 29*89bcfda6SBram Moolenaar \ 'ruby_foldable_groups', 30*89bcfda6SBram Moolenaar \ get(g:, 'ruby_foldable_groups', 'ALL') 31*89bcfda6SBram Moolenaar \ ) 32*89bcfda6SBram Moolenaar \ ) 33*89bcfda6SBram Moolenaar 34*89bcfda6SBram Moolenaarfunction! s:foldable(...) abort 35*89bcfda6SBram Moolenaar if index(s:foldable_groups, 'ALL') > -1 36*89bcfda6SBram Moolenaar return 1 37*89bcfda6SBram Moolenaar endif 38*89bcfda6SBram Moolenaar 39*89bcfda6SBram Moolenaar for l:i in a:000 40*89bcfda6SBram Moolenaar if index(s:foldable_groups, l:i) > -1 41*89bcfda6SBram Moolenaar return 1 42*89bcfda6SBram Moolenaar endif 43*89bcfda6SBram Moolenaar endfor 44*89bcfda6SBram Moolenaar 45*89bcfda6SBram Moolenaar return 0 46*89bcfda6SBram Moolenaarendfunction " }}} 47*89bcfda6SBram Moolenaar 481d68952aSBram Moolenaarsyn cluster rubyNotTop contains=@rubyExtendedStringSpecial,@rubyRegexpSpecial,@rubyDeclaration,rubyConditional,rubyExceptional,rubyMethodExceptional,rubyTodo 49c236c16dSBram Moolenaar 50*89bcfda6SBram Moolenaar" Whitespace Errors {{{1 516b730e11SBram Moolenaarif exists("ruby_space_errors") 526b730e11SBram Moolenaar if !exists("ruby_no_trail_space_error") 536b730e11SBram Moolenaar syn match rubySpaceError display excludenl "\s\+$" 546b730e11SBram Moolenaar endif 556b730e11SBram Moolenaar if !exists("ruby_no_tab_space_error") 566b730e11SBram Moolenaar syn match rubySpaceError display " \+\t"me=e-1 576b730e11SBram Moolenaar endif 586b730e11SBram Moolenaarendif 596b730e11SBram Moolenaar 60*89bcfda6SBram Moolenaar" Operators {{{1 619964e468SBram Moolenaarif exists("ruby_operators") 62*89bcfda6SBram Moolenaar syn match rubyOperator "[~!^|*/%+-]\|&\.\@!\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@1<!>\|\*\*\|\.\.\.\|\.\.\|::" 63ec7944aaSBram Moolenaar syn match rubyOperator "->\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!=" 64*89bcfda6SBram Moolenaar syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\w[?!]\=\|[]})]\)\@2<=\[\s*" end="\s*]" contains=ALLBUT,@rubyNotTop 659964e468SBram Moolenaarendif 669964e468SBram Moolenaar 67*89bcfda6SBram Moolenaar" Expression Substitution and Backslash Notation {{{1 68c236c16dSBram Moolenaarsyn match rubyStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display 69c236c16dSBram Moolenaarsyn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display 701d68952aSBram Moolenaarsyn match rubyQuoteEscape "\\[\\']" contained display 719964e468SBram Moolenaar 72c236c16dSBram Moolenaarsyn region rubyInterpolation matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop 739964e468SBram Moolenaarsyn match rubyInterpolation "#\%(\$\|@@\=\)\w\+" display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable,rubyPredefinedVariable 749964e468SBram Moolenaarsyn match rubyInterpolationDelimiter "#\ze\%(\$\|@@\=\)\w\+" display contained 75c1762ccbSBram Moolenaarsyn match rubyInterpolation "#\$\%(-\w\|\W\)" display contained contains=rubyInterpolationDelimiter,rubyPredefinedVariable,rubyInvalidVariable 76c1762ccbSBram Moolenaarsyn match rubyInterpolationDelimiter "#\ze\$\%(-\w\|\W\)" display contained 779964e468SBram Moolenaarsyn region rubyNoInterpolation start="\\#{" end="}" contained 789964e468SBram Moolenaarsyn match rubyNoInterpolation "\\#{" display contained 799964e468SBram Moolenaarsyn match rubyNoInterpolation "\\#\%(\$\|@@\=\)\w\+" display contained 80c1762ccbSBram Moolenaarsyn match rubyNoInterpolation "\\#\$\W" display contained 816b730e11SBram Moolenaar 82*89bcfda6SBram Moolenaarsyn match rubyDelimiterEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE 836b730e11SBram Moolenaar 84c236c16dSBram Moolenaarsyn region rubyNestedParentheses start="(" skip="\\\\\|\\)" matchgroup=rubyString end=")" transparent contained 85c236c16dSBram Moolenaarsyn region rubyNestedCurlyBraces start="{" skip="\\\\\|\\}" matchgroup=rubyString end="}" transparent contained 86c236c16dSBram Moolenaarsyn region rubyNestedAngleBrackets start="<" skip="\\\\\|\\>" matchgroup=rubyString end=">" transparent contained 87c236c16dSBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" matchgroup=rubyString end="\]" transparent contained 886b730e11SBram Moolenaar 89*89bcfda6SBram Moolenaar" Regular Expression Metacharacters {{{1 90c236c16dSBram Moolenaar" These are mostly Oniguruma ready 91c236c16dSBram Moolenaarsyn region rubyRegexpComment matchgroup=rubyRegexpSpecial start="(?#" skip="\\)" end=")" contained 92c236c16dSBram Moolenaarsyn region rubyRegexpParens matchgroup=rubyRegexpSpecial start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\)" end=")" contained transparent contains=@rubyRegexpSpecial 93c236c16dSBram Moolenaarsyn region rubyRegexpBrackets matchgroup=rubyRegexpCharClass start="\[\^\=" skip="\\\]" end="\]" contained transparent contains=rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass oneline 94c236c16dSBram Moolenaarsyn match rubyRegexpCharClass "\\[DdHhSsWw]" contained display 95c236c16dSBram Moolenaarsyn match rubyRegexpCharClass "\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\):\]" contained 961d68952aSBram Moolenaarsyn match rubyRegexpEscape "\\[].*?+^$|\\/(){}[]" contained 97c236c16dSBram Moolenaarsyn match rubyRegexpQuantifier "[*?+][?+]\=" contained display 98c236c16dSBram Moolenaarsyn match rubyRegexpQuantifier "{\d\+\%(,\d*\)\=}?\=" contained display 99c236c16dSBram Moolenaarsyn match rubyRegexpAnchor "[$^]\|\\[ABbGZz]" contained display 100c236c16dSBram Moolenaarsyn match rubyRegexpDot "\." contained display 101c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "|" contained display 102c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\[1-9]\d\=\d\@!" contained display 103c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display 104c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display 105c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\g<\%([a-z_]\w*\|-\=\d\+\)>" contained display 106c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\g'\%([a-z_]\w*\|-\=\d\+\)'" contained display 107c236c16dSBram Moolenaar 108c236c16dSBram Moolenaarsyn cluster rubyStringSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape 1096b730e11SBram Moolenaarsyn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets 110c236c16dSBram Moolenaarsyn cluster rubyRegexpSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment 111071d4279SBram Moolenaar 112*89bcfda6SBram Moolenaar" Numbers and ASCII Codes {{{1 113*89bcfda6SBram Moolenaarsyn match rubyASCIICode "\%(\w\|[]})\"'/]\)\@1<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)" 114*89bcfda6SBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*r\=i\=\>" display 115*89bcfda6SBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)r\=i\=\>" display 116*89bcfda6SBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*r\=i\=\>" display 117*89bcfda6SBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*r\=i\=\>" display 118*89bcfda6SBram Moolenaarsyn match rubyFloat "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*r\=i\=\>" display 119*89bcfda6SBram Moolenaarsyn match rubyFloat "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)r\=i\=\>" display 120071d4279SBram Moolenaar 121*89bcfda6SBram Moolenaar" Identifiers {{{1 1226b730e11SBram Moolenaarsyn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent 1236b730e11SBram Moolenaarsyn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent 124071d4279SBram Moolenaar 125*89bcfda6SBram Moolenaarsyn match rubyConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" 126ec7944aaSBram Moolenaarsyn match rubyClassVariable "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display 127ec7944aaSBram Moolenaarsyn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display 128ec7944aaSBram Moolenaarsyn match rubyGlobalVariable "$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)" 129*89bcfda6SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!:\%(\^\|\~@\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!@\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" 130*89bcfda6SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" 131*89bcfda6SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" 132*89bcfda6SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\=" 133*89bcfda6SBram Moolenaar 134*89bcfda6SBram Moolenaarif s:foldable(':') 135*89bcfda6SBram Moolenaar syn region rubySymbol start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape fold 136*89bcfda6SBram Moolenaar syn region rubySymbol start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold 137*89bcfda6SBram Moolenaarelse 138*89bcfda6SBram Moolenaar syn region rubySymbol start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape 139*89bcfda6SBram Moolenaar syn region rubySymbol start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial 140*89bcfda6SBram Moolenaarendif 141*89bcfda6SBram Moolenaar 142*89bcfda6SBram Moolenaarsyn match rubyCapitalizedMethod "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)*\s*(\@=" 143071d4279SBram Moolenaar 144ec7944aaSBram Moolenaarsyn match rubyBlockParameter "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contained 145*89bcfda6SBram Moolenaarsyn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\_s*\)\@32<=|" end="|" oneline display contains=rubyBlockParameter 146c1762ccbSBram Moolenaar 147c236c16dSBram Moolenaarsyn match rubyInvalidVariable "$[^ A-Za-z_-]" 148ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~]# 149ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable "$\d\+" display 1506b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>" display 1516b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display 1526b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display 1531e015460SBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display 154*89bcfda6SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(ARGF\|ARGV\|ENV\|DATA\|FALSE\|NIL\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!" 155*89bcfda6SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!" 156071d4279SBram Moolenaar 157*89bcfda6SBram Moolenaar" Normal Regular Expression {{{1 158*89bcfda6SBram Moolenaarif s:foldable('/') 159*89bcfda6SBram 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 160c236c16dSBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold 161*89bcfda6SBram Moolenaarelse 162*89bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial 163*89bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial 164*89bcfda6SBram Moolenaarendif 165c236c16dSBram Moolenaar 166*89bcfda6SBram Moolenaar" Generalized Regular Expression {{{1 167*89bcfda6SBram Moolenaarif s:foldable('%') 168c236c16dSBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold 169c236c16dSBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{" end="}[iomxneus]*" skip="\\\\\|\\}" contains=@rubyRegexpSpecial fold 170*89bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<" end=">[iomxneus]*" skip="\\\\\|\\>" contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape fold 171c236c16dSBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\[" end="\][iomxneus]*" skip="\\\\\|\\\]" contains=@rubyRegexpSpecial fold 172c236c16dSBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r(" end=")[iomxneus]*" skip="\\\\\|\\)" contains=@rubyRegexpSpecial fold 173*89bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z(\s\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold 174*89bcfda6SBram Moolenaarelse 175*89bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial 176*89bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{" end="}[iomxneus]*" skip="\\\\\|\\}" contains=@rubyRegexpSpecial 177*89bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<" end=">[iomxneus]*" skip="\\\\\|\\>" contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape 178*89bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\[" end="\][iomxneus]*" skip="\\\\\|\\\]" contains=@rubyRegexpSpecial 179*89bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r(" end=")[iomxneus]*" skip="\\\\\|\\)" contains=@rubyRegexpSpecial 180*89bcfda6SBram Moolenaar syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z(\s\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial 181*89bcfda6SBram Moolenaarendif 1826b730e11SBram Moolenaar 183*89bcfda6SBram Moolenaar" Normal String {{{1 184*89bcfda6SBram Moolenaarlet s:spell_cluster = exists('ruby_spellcheck_strings') ? ',@Spell' : '' 185*89bcfda6SBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" ' . 186*89bcfda6SBram Moolenaar \ (s:foldable('%') ? 'fold' : '') . ' contains=@rubyStringSpecial' . s:spell_cluster 187*89bcfda6SBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="''" end="''" skip="\\\\\|\\''" ' . 188*89bcfda6SBram Moolenaar \ (s:foldable('%') ? 'fold' : '') . ' contains=rubyQuoteEscape' . s:spell_cluster 189*89bcfda6SBram Moolenaar 190*89bcfda6SBram Moolenaar" Shell Command Output {{{1 191*89bcfda6SBram Moolenaarif s:foldable('%') 1929964e468SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial fold 193*89bcfda6SBram Moolenaarelse 194*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial 195*89bcfda6SBram Moolenaarendif 1966b730e11SBram Moolenaar 197*89bcfda6SBram Moolenaar" Generalized Single Quoted String, Symbol and Array of Strings {{{1 198*89bcfda6SBram Moolenaarif s:foldable('%') 199*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold 200*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape 201*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape 202*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape 203*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimiterEscape 204*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" fold 205ec7944aaSBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold 206*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape 207*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape 208*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape 209*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s(" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimiterEscape 210*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" fold 211*89bcfda6SBram Moolenaarelse 212*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" 213*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]{" end="}" skip="\\\\\|\\}" contains=rubyNestedCurlyBraces,rubyDelimiterEscape 214*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]<" end=">" skip="\\\\\|\\>" contains=rubyNestedAngleBrackets,rubyDelimiterEscape 215*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw]\[" end="\]" skip="\\\\\|\\\]" contains=rubyNestedSquareBrackets,rubyDelimiterEscape 216*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[qw](" end=")" skip="\\\\\|\\)" contains=rubyNestedParentheses,rubyDelimiterEscape 217*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" 218*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" 219*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{" end="}" skip="\\\\\|\\}" contains=rubyNestedCurlyBraces,rubyDelimiterEscape 220*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<" end=">" skip="\\\\\|\\>" contains=rubyNestedAngleBrackets,rubyDelimiterEscape 221*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\[" end="\]" skip="\\\\\|\\\]" contains=rubyNestedSquareBrackets,rubyDelimiterEscape 222*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s(" end=")" skip="\\\\\|\\)" contains=rubyNestedParentheses,rubyDelimiterEscape 223*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" 224*89bcfda6SBram Moolenaarendif 2256b730e11SBram Moolenaar 226*89bcfda6SBram Moolenaar" Generalized Double Quoted String and Array of Strings and Shell Command Output {{{1 2276b730e11SBram Moolenaar" Note: %= is not matched here as the beginning of a double quoted string 228*89bcfda6SBram Moolenaarif s:foldable('%') 2296b730e11SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 230*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 231*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape fold 232*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape fold 233*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape fold 234*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape fold 235*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx]\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 236*89bcfda6SBram Moolenaarelse 237*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial 238*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial 239*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape 240*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape 241*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape 242*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape 243*89bcfda6SBram Moolenaar syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx]\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial 244*89bcfda6SBram Moolenaarendif 245071d4279SBram Moolenaar 246*89bcfda6SBram Moolenaar" Array of Symbols {{{1 247*89bcfda6SBram Moolenaarif s:foldable('%') 248*89bcfda6SBram Moolenaar " Array of Symbols 249*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold 250*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimiterEscape 251*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimiterEscape 252*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimiterEscape 253*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i(" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimiterEscape 254071d4279SBram Moolenaar 255*89bcfda6SBram Moolenaar " Array of interpolated Symbols 256*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold 257*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I{" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape fold 258*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape fold 259*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape fold 260*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape fold 261*89bcfda6SBram Moolenaarelse 262*89bcfda6SBram Moolenaar " Array of Symbols 263*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" 264*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i{" end="}" skip="\\\\\|\\}" contains=rubyNestedCurlyBraces,rubyDelimiterEscape 265*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i<" end=">" skip="\\\\\|\\>" contains=rubyNestedAngleBrackets,rubyDelimiterEscape 266*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i\[" end="\]" skip="\\\\\|\\\]" contains=rubyNestedSquareBrackets,rubyDelimiterEscape 267*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%i(" end=")" skip="\\\\\|\\)" contains=rubyNestedParentheses,rubyDelimiterEscape 2686b730e11SBram Moolenaar 269*89bcfda6SBram Moolenaar " Array of interpolated Symbols 270*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial 271*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I{" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimiterEscape 272*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimiterEscape 273*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimiterEscape 274*89bcfda6SBram Moolenaar syn region rubySymbol matchgroup=rubySymbolDelimiter start="%I(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimiterEscape 275*89bcfda6SBram Moolenaarendif 2766b730e11SBram Moolenaar 277*89bcfda6SBram Moolenaar" Here Document {{{1 278*89bcfda6SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<[-~]\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 279*89bcfda6SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 280*89bcfda6SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 281*89bcfda6SBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 282*89bcfda6SBram Moolenaar 283*89bcfda6SBram Moolenaarif s:foldable('<<') 284*89bcfda6SBram 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 285*89bcfda6SBram 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 286*89bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc fold keepend 287*89bcfda6SBram 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 288*89bcfda6SBram Moolenaar 289*89bcfda6SBram 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 290*89bcfda6SBram 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 291*89bcfda6SBram 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 292*89bcfda6SBram 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 293*89bcfda6SBram Moolenaarelse 294*89bcfda6SBram 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 295*89bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend 296*89bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc keepend 297*89bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial keepend 298*89bcfda6SBram Moolenaar 299*89bcfda6SBram 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 300*89bcfda6SBram 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 301*89bcfda6SBram Moolenaar syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart keepend 302*89bcfda6SBram 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 303*89bcfda6SBram Moolenaarendif 304*89bcfda6SBram Moolenaar 305*89bcfda6SBram Moolenaar" eRuby Config {{{1 3066b730e11SBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby' 307d5cdbeb8SBram Moolenaar let b:ruby_no_expensive = 1 3086b730e11SBram Moolenaarend 309071d4279SBram Moolenaar 310*89bcfda6SBram Moolenaar" Module, Class, Method and Alias Declarations {{{1 3119964e468SBram Moolenaarsyn match rubyAliasDeclaration "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable nextgroup=rubyAliasDeclaration2 skipwhite 3129964e468SBram Moolenaarsyn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable 3139964e468SBram Moolenaarsyn match rubyMethodDeclaration "[^[:space:];#(]\+" contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable 314c236c16dSBram Moolenaarsyn match rubyClassDeclaration "[^[:space:];#<]\+" contained contains=rubyConstant,rubyOperator 315c236c16dSBram Moolenaarsyn match rubyModuleDeclaration "[^[:space:];#<]\+" contained contains=rubyConstant,rubyOperator 3161d68952aSBram Moolenaarsyn match rubyFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration 317*89bcfda6SBram Moolenaarsyn match rubyFunction "\%(\s\|^\)\@1<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2 318*89bcfda6SBram Moolenaarsyn match rubyFunction "\%([[:space:].]\|^\)\@2<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration 319c1762ccbSBram Moolenaar 320c236c16dSBram Moolenaarsyn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyFunction,rubyBlockParameter 321c236c16dSBram Moolenaar 322*89bcfda6SBram Moolenaar" Keywords {{{1 3231d68952aSBram Moolenaar" Note: the following keywords have already been defined: 3241d68952aSBram Moolenaar" begin case class def do end for if module unless until while 3251d68952aSBram Moolenaarsyn match rubyControl "\<\%(and\|break\|in\|next\|not\|or\|redo\|rescue\|retry\|return\)\>[?!]\@!" 3261d68952aSBram Moolenaarsyn match rubyOperator "\<defined?" display 3271d68952aSBram Moolenaarsyn match rubyKeyword "\<\%(super\|yield\)\>[?!]\@!" 3281d68952aSBram Moolenaarsyn match rubyBoolean "\<\%(true\|false\)\>[?!]\@!" 329*89bcfda6SBram Moolenaarsyn match rubyPseudoVariable "\<\%(nil\|self\|__ENCODING__\|__dir__\|__FILE__\|__LINE__\|__callee__\|__method__\)\>[?!]\@!" " TODO: reorganise 3301d68952aSBram Moolenaarsyn match rubyBeginEnd "\<\%(BEGIN\|END\)\>[?!]\@!" 3311d68952aSBram Moolenaar 332*89bcfda6SBram Moolenaar" Expensive Mode {{{1 333*89bcfda6SBram Moolenaar" Match 'end' with the appropriate opening keyword for syntax based folding 334*89bcfda6SBram Moolenaar" and special highlighting of module/class/method definitions 335d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive") 3369964e468SBram Moolenaar syn match rubyDefine "\<alias\>" nextgroup=rubyAliasDeclaration skipwhite skipnl 3379964e468SBram Moolenaar syn match rubyDefine "\<def\>" nextgroup=rubyMethodDeclaration skipwhite skipnl 338c236c16dSBram Moolenaar syn match rubyDefine "\<undef\>" nextgroup=rubyFunction skipwhite skipnl 3399964e468SBram Moolenaar syn match rubyClass "\<class\>" nextgroup=rubyClassDeclaration skipwhite skipnl 3409964e468SBram Moolenaar syn match rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl 3411d68952aSBram Moolenaar 342*89bcfda6SBram Moolenaar if s:foldable('def') 3431d68952aSBram Moolenaar syn region rubyMethodBlock start="\<def\>" matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold 344*89bcfda6SBram Moolenaar else 345*89bcfda6SBram Moolenaar syn region rubyMethodBlock start="\<def\>" matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop 346*89bcfda6SBram Moolenaar endif 347*89bcfda6SBram Moolenaar 348*89bcfda6SBram Moolenaar if s:foldable('class') 349c236c16dSBram Moolenaar syn region rubyBlock start="\<class\>" matchgroup=rubyClass end="\<end\>" contains=ALLBUT,@rubyNotTop fold 350*89bcfda6SBram Moolenaar else 351*89bcfda6SBram Moolenaar syn region rubyBlock start="\<class\>" matchgroup=rubyClass end="\<end\>" contains=ALLBUT,@rubyNotTop 352*89bcfda6SBram Moolenaar endif 353*89bcfda6SBram Moolenaar 354*89bcfda6SBram Moolenaar if s:foldable('module') 355c236c16dSBram Moolenaar syn region rubyBlock start="\<module\>" matchgroup=rubyModule end="\<end\>" contains=ALLBUT,@rubyNotTop fold 356*89bcfda6SBram Moolenaar else 357*89bcfda6SBram Moolenaar syn region rubyBlock start="\<module\>" matchgroup=rubyModule end="\<end\>" contains=ALLBUT,@rubyNotTop 358*89bcfda6SBram Moolenaar endif 359071d4279SBram Moolenaar 3606b730e11SBram Moolenaar " modifiers 361*89bcfda6SBram Moolenaar syn match rubyLineContinuation "\\$" nextgroup=rubyConditionalModifier,rubyRepeatModifier skipwhite skipnl 362*89bcfda6SBram Moolenaar syn match rubyConditionalModifier "\<\%(if\|unless\)\>" 363*89bcfda6SBram Moolenaar syn match rubyRepeatModifier "\<\%(while\|until\)\>" 364071d4279SBram Moolenaar 365*89bcfda6SBram Moolenaar if s:foldable('do') 366c236c16dSBram Moolenaar syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold 367*89bcfda6SBram Moolenaar else 368*89bcfda6SBram Moolenaar syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyNotTop 369*89bcfda6SBram Moolenaar endif 370*89bcfda6SBram Moolenaar 371c1762ccbSBram Moolenaar " curly bracket block or hash literal 372*89bcfda6SBram Moolenaar if s:foldable('{') 373ec7944aaSBram Moolenaar syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop fold 374*89bcfda6SBram Moolenaar else 375*89bcfda6SBram Moolenaar syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop 376*89bcfda6SBram Moolenaar endif 377*89bcfda6SBram Moolenaar 378*89bcfda6SBram Moolenaar if s:foldable('[') 379c236c16dSBram Moolenaar syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold 380*89bcfda6SBram Moolenaar else 381*89bcfda6SBram Moolenaar syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop 382*89bcfda6SBram Moolenaar endif 383071d4279SBram Moolenaar 384c1762ccbSBram Moolenaar " statements without 'do' 385*89bcfda6SBram Moolenaar if s:foldable('begin') 386c236c16dSBram Moolenaar syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold 387*89bcfda6SBram Moolenaar else 388*89bcfda6SBram Moolenaar syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop 389*89bcfda6SBram Moolenaar endif 390*89bcfda6SBram Moolenaar 391*89bcfda6SBram Moolenaar if s:foldable('case') 392c236c16dSBram Moolenaar syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold 393*89bcfda6SBram Moolenaar else 394*89bcfda6SBram Moolenaar syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@rubyNotTop 395*89bcfda6SBram Moolenaar endif 396*89bcfda6SBram Moolenaar 397*89bcfda6SBram Moolenaar if s:foldable('if') 398*89bcfda6SBram Moolenaar syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@1<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold 399*89bcfda6SBram Moolenaar else 400*89bcfda6SBram Moolenaar syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@1<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop 401*89bcfda6SBram Moolenaar endif 402071d4279SBram Moolenaar 403c236c16dSBram Moolenaar syn match rubyConditional "\<\%(then\|else\|when\)\>[?!]\@!" contained containedin=rubyCaseExpression 404c236c16dSBram Moolenaar syn match rubyConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=rubyConditionalExpression 405c1762ccbSBram Moolenaar 4061d68952aSBram Moolenaar syn match rubyExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyBlockExpression 4071d68952aSBram Moolenaar syn match rubyMethodExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyMethodBlock 4081d68952aSBram Moolenaar 409c1762ccbSBram Moolenaar " statements with optional 'do' 410c236c16dSBram Moolenaar syn region rubyOptionalDoLine matchgroup=rubyRepeat start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyOptionalDo end="\%(\<do\>\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop 411*89bcfda6SBram Moolenaar 412*89bcfda6SBram Moolenaar if s:foldable('for') 413c236c16dSBram Moolenaar syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine fold 414*89bcfda6SBram Moolenaar else 415*89bcfda6SBram Moolenaar syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine 416*89bcfda6SBram Moolenaar endif 417071d4279SBram Moolenaar 418071d4279SBram Moolenaar if !exists("ruby_minlines") 419ec7944aaSBram Moolenaar let ruby_minlines = 500 420071d4279SBram Moolenaar endif 421071d4279SBram Moolenaar exec "syn sync minlines=" . ruby_minlines 422071d4279SBram Moolenaar 4236b730e11SBram Moolenaarelse 424c236c16dSBram Moolenaar syn match rubyControl "\<def\>[?!]\@!" nextgroup=rubyMethodDeclaration skipwhite skipnl 425c236c16dSBram Moolenaar syn match rubyControl "\<class\>[?!]\@!" nextgroup=rubyClassDeclaration skipwhite skipnl 426c236c16dSBram Moolenaar syn match rubyControl "\<module\>[?!]\@!" nextgroup=rubyModuleDeclaration skipwhite skipnl 4271d68952aSBram Moolenaar syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|ensure\|then\|when\|end\)\>[?!]\@!" 428c236c16dSBram Moolenaar syn match rubyKeyword "\<\%(alias\|undef\)\>[?!]\@!" 4296b730e11SBram Moolenaarendif 430071d4279SBram Moolenaar 431*89bcfda6SBram Moolenaar" Special Methods {{{1 4326b730e11SBram Moolenaarif !exists("ruby_no_special_methods") 433ec7944aaSBram Moolenaar syn keyword rubyAccess public protected private public_class_method private_class_method public_constant private_constant module_function 434c236c16dSBram Moolenaar " attr is a common variable name 435c236c16dSBram Moolenaar syn match rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!" 436c236c16dSBram Moolenaar syn keyword rubyAttribute attr_accessor attr_reader attr_writer 437c236c16dSBram Moolenaar syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>[?!]\@!\)" 4386b730e11SBram Moolenaar syn keyword rubyEval eval class_eval instance_eval module_eval 4396b730e11SBram Moolenaar syn keyword rubyException raise fail catch throw 440c236c16dSBram Moolenaar " false positive with 'include?' 441c236c16dSBram Moolenaar syn match rubyInclude "\<include\>[?!]\@!" 442*89bcfda6SBram Moolenaar syn keyword rubyInclude autoload extend load prepend refine require require_relative using 4436b730e11SBram Moolenaar syn keyword rubyKeyword callcc caller lambda proc 444071d4279SBram Moolenaarendif 445071d4279SBram Moolenaar 446*89bcfda6SBram Moolenaar" Comments and Documentation {{{1 4476b730e11SBram Moolenaarsyn match rubySharpBang "\%^#!.*" display 448*89bcfda6SBram Moolenaarsyn keyword rubyTodo FIXME NOTE TODO OPTIMIZE HACK REVIEW XXX todo contained 4496b730e11SBram Moolenaarsyn match rubyComment "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell 450*89bcfda6SBram Moolenaarif !exists("ruby_no_comment_fold") && s:foldable('#') 451*89bcfda6SBram Moolenaar syn region rubyMultilineComment start="^\s*#.*\n\%(^\s*#\)\@=" end="^\s*#.*\n\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend 452ec7944aaSBram Moolenaar syn region rubyDocumentation start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold 4539964e468SBram Moolenaarelse 4549964e468SBram Moolenaar syn region rubyDocumentation start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell 4559964e468SBram Moolenaarendif 4566b730e11SBram Moolenaar 457*89bcfda6SBram Moolenaar" Keyword Nobbling {{{1 4586b730e11SBram Moolenaar" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver 459*89bcfda6SBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@1<!\.\)\|::\)\_s*\%([_[:lower:]][_[:alnum:]]*\|\<\%(BEGIN\|END\)\>\)" transparent contains=NONE 460*89bcfda6SBram Moolenaarsyn match rubyKeywordAsMethod "\(defined?\|exit!\)\@!\<[_[:lower:]][_[:alnum:]]*[?!]" transparent contains=NONE 4616b730e11SBram Moolenaar 462*89bcfda6SBram Moolenaar" More Symbols {{{1 463*89bcfda6SBram Moolenaarsyn match rubySymbol "\%([{(,]\_s*\)\zs\l\w*[!?]\=::\@!"he=e-1 464*89bcfda6SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="he=e-1 465*89bcfda6SBram Moolenaarsyn match rubySymbol "\%([{(,]\_s*\)\zs[[:space:],{]\l\w*[!?]\=::\@!"hs=s+1,he=e-1 466*89bcfda6SBram Moolenaarsyn match rubySymbol "[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@="hs=s+1,he=e-1 467c236c16dSBram Moolenaar 468*89bcfda6SBram Moolenaar" __END__ Directive {{{1 469*89bcfda6SBram Moolenaarif s:foldable('__END__') 4706b730e11SBram Moolenaar syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold 471*89bcfda6SBram Moolenaarelse 472*89bcfda6SBram Moolenaar syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" 473*89bcfda6SBram Moolenaarendif 474071d4279SBram Moolenaar 475*89bcfda6SBram Moolenaar" Default Highlighting {{{1 476c1762ccbSBram Moolenaarhi def link rubyClass rubyDefine 477c1762ccbSBram Moolenaarhi def link rubyModule rubyDefine 4781d68952aSBram Moolenaarhi def link rubyMethodExceptional rubyDefine 479c1762ccbSBram Moolenaarhi def link rubyDefine Define 480c1762ccbSBram Moolenaarhi def link rubyFunction Function 481c1762ccbSBram Moolenaarhi def link rubyConditional Conditional 482c1762ccbSBram Moolenaarhi def link rubyConditionalModifier rubyConditional 4831d68952aSBram Moolenaarhi def link rubyExceptional rubyConditional 484c1762ccbSBram Moolenaarhi def link rubyRepeat Repeat 485c1762ccbSBram Moolenaarhi def link rubyRepeatModifier rubyRepeat 486c1762ccbSBram Moolenaarhi def link rubyOptionalDo rubyRepeat 487c1762ccbSBram Moolenaarhi def link rubyControl Statement 488c1762ccbSBram Moolenaarhi def link rubyInclude Include 489c1762ccbSBram Moolenaarhi def link rubyInteger Number 490c1762ccbSBram Moolenaarhi def link rubyASCIICode Character 491c1762ccbSBram Moolenaarhi def link rubyFloat Float 492c1762ccbSBram Moolenaarhi def link rubyBoolean Boolean 493c1762ccbSBram Moolenaarhi def link rubyException Exception 4946b730e11SBram Moolenaarif !exists("ruby_no_identifiers") 495c1762ccbSBram Moolenaar hi def link rubyIdentifier Identifier 4966b730e11SBram Moolenaarelse 497c1762ccbSBram Moolenaar hi def link rubyIdentifier NONE 4986b730e11SBram Moolenaarendif 499c1762ccbSBram Moolenaarhi def link rubyClassVariable rubyIdentifier 500c1762ccbSBram Moolenaarhi def link rubyConstant Type 501c1762ccbSBram Moolenaarhi def link rubyGlobalVariable rubyIdentifier 502c1762ccbSBram Moolenaarhi def link rubyBlockParameter rubyIdentifier 503c1762ccbSBram Moolenaarhi def link rubyInstanceVariable rubyIdentifier 504c1762ccbSBram Moolenaarhi def link rubyPredefinedIdentifier rubyIdentifier 505c1762ccbSBram Moolenaarhi def link rubyPredefinedConstant rubyPredefinedIdentifier 506c1762ccbSBram Moolenaarhi def link rubyPredefinedVariable rubyPredefinedIdentifier 507c1762ccbSBram Moolenaarhi def link rubySymbol Constant 508c1762ccbSBram Moolenaarhi def link rubyKeyword Keyword 509c1762ccbSBram Moolenaarhi def link rubyOperator Operator 510c1762ccbSBram Moolenaarhi def link rubyBeginEnd Statement 511c1762ccbSBram Moolenaarhi def link rubyAccess Statement 512c1762ccbSBram Moolenaarhi def link rubyAttribute Statement 513c1762ccbSBram Moolenaarhi def link rubyEval Statement 514c1762ccbSBram Moolenaarhi def link rubyPseudoVariable Constant 515*89bcfda6SBram Moolenaarhi def link rubyCapitalizedMethod rubyLocalVariableOrMethod 516071d4279SBram Moolenaar 517c1762ccbSBram Moolenaarhi def link rubyComment Comment 518c1762ccbSBram Moolenaarhi def link rubyData Comment 519c1762ccbSBram Moolenaarhi def link rubyDataDirective Delimiter 520c1762ccbSBram Moolenaarhi def link rubyDocumentation Comment 521c236c16dSBram Moolenaarhi def link rubyTodo Todo 522c236c16dSBram Moolenaar 5231d68952aSBram Moolenaarhi def link rubyQuoteEscape rubyStringEscape 524c236c16dSBram Moolenaarhi def link rubyStringEscape Special 525c1762ccbSBram Moolenaarhi def link rubyInterpolationDelimiter Delimiter 526c1762ccbSBram Moolenaarhi def link rubyNoInterpolation rubyString 527c1762ccbSBram Moolenaarhi def link rubySharpBang PreProc 528c1762ccbSBram Moolenaarhi def link rubyRegexpDelimiter rubyStringDelimiter 529*89bcfda6SBram Moolenaarhi def link rubySymbolDelimiter rubySymbol 530c1762ccbSBram Moolenaarhi def link rubyStringDelimiter Delimiter 531ec7944aaSBram Moolenaarhi def link rubyHeredoc rubyString 532c1762ccbSBram Moolenaarhi def link rubyString String 533c236c16dSBram Moolenaarhi def link rubyRegexpEscape rubyRegexpSpecial 534c236c16dSBram Moolenaarhi def link rubyRegexpQuantifier rubyRegexpSpecial 535c236c16dSBram Moolenaarhi def link rubyRegexpAnchor rubyRegexpSpecial 536c236c16dSBram Moolenaarhi def link rubyRegexpDot rubyRegexpCharClass 537c236c16dSBram Moolenaarhi def link rubyRegexpCharClass rubyRegexpSpecial 538c236c16dSBram Moolenaarhi def link rubyRegexpSpecial Special 539c236c16dSBram Moolenaarhi def link rubyRegexpComment Comment 540c236c16dSBram Moolenaarhi def link rubyRegexp rubyString 5416b730e11SBram Moolenaar 542c1762ccbSBram Moolenaarhi def link rubyInvalidVariable Error 543c1762ccbSBram Moolenaarhi def link rubyError Error 544c1762ccbSBram Moolenaarhi def link rubySpaceError rubyError 545071d4279SBram Moolenaar 546*89bcfda6SBram Moolenaar" Postscript {{{1 547071d4279SBram Moolenaarlet b:current_syntax = "ruby" 548071d4279SBram Moolenaar 549*89bcfda6SBram Moolenaarlet &cpo = s:cpo_sav 550*89bcfda6SBram Moolenaarunlet! s:cpo_sav 551*89bcfda6SBram Moolenaar 552*89bcfda6SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: 553