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*2ed639abSBram Moolenaar" Last Change: 2019 Jul 13 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 22*2ed639abSBram Moolenaar" eRuby Config {{{1 23*2ed639abSBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby' 24*2ed639abSBram Moolenaar let b:ruby_no_expensive = 1 25*2ed639abSBram Moolenaarendif 26*2ed639abSBram Moolenaar 2789bcfda6SBram Moolenaar" Folding Config {{{1 286b730e11SBram Moolenaarif has("folding") && exists("ruby_fold") 296b730e11SBram Moolenaar setlocal foldmethod=syntax 306b730e11SBram Moolenaarendif 316b730e11SBram Moolenaar 3289bcfda6SBram Moolenaarlet s:foldable_groups = split( 3389bcfda6SBram Moolenaar \ get( 3489bcfda6SBram Moolenaar \ b:, 3589bcfda6SBram Moolenaar \ 'ruby_foldable_groups', 3689bcfda6SBram Moolenaar \ get(g:, 'ruby_foldable_groups', 'ALL') 3789bcfda6SBram Moolenaar \ ) 3889bcfda6SBram Moolenaar \ ) 3989bcfda6SBram Moolenaar 4089bcfda6SBram Moolenaarfunction! s:foldable(...) abort 41*2ed639abSBram Moolenaar if index(s:foldable_groups, 'NONE') > -1 42*2ed639abSBram Moolenaar return 0 43*2ed639abSBram Moolenaar endif 44*2ed639abSBram Moolenaar 4589bcfda6SBram Moolenaar if index(s:foldable_groups, 'ALL') > -1 4689bcfda6SBram Moolenaar return 1 4789bcfda6SBram Moolenaar endif 4889bcfda6SBram Moolenaar 4989bcfda6SBram Moolenaar for l:i in a:000 5089bcfda6SBram Moolenaar if index(s:foldable_groups, l:i) > -1 5189bcfda6SBram Moolenaar return 1 5289bcfda6SBram Moolenaar endif 5389bcfda6SBram Moolenaar endfor 5489bcfda6SBram Moolenaar 5589bcfda6SBram Moolenaar return 0 56*2ed639abSBram Moolenaarendfunction 5789bcfda6SBram Moolenaar 58*2ed639abSBram Moolenaarfunction! s:run_syntax_fold(args) abort 59*2ed639abSBram Moolenaar let [_0, _1, groups, cmd; _] = matchlist(a:args, '\(["'']\)\(.\{-}\)\1\s\+\(.*\)') 60*2ed639abSBram Moolenaar if call('s:foldable', split(groups)) 61*2ed639abSBram Moolenaar let cmd .= ' fold' 62*2ed639abSBram Moolenaar endif 63*2ed639abSBram Moolenaar exe cmd 64*2ed639abSBram Moolenaarendfunction 65*2ed639abSBram Moolenaar 66*2ed639abSBram Moolenaarcom! -nargs=* SynFold call s:run_syntax_fold(<q-args>) 67*2ed639abSBram Moolenaar 68*2ed639abSBram Moolenaar" Not-Top Cluster {{{1 69*2ed639abSBram Moolenaarsyn cluster rubyNotTop contains=@rubyCommentNotTop,@rubyStringNotTop,@rubyRegexpSpecial,@rubyDeclaration,@rubyExceptionHandler,@rubyClassOperator,rubyConditional,rubyModuleName,rubyClassName,rubySymbolDelimiter,rubyParentheses 70c236c16dSBram Moolenaar 7189bcfda6SBram Moolenaar" Whitespace Errors {{{1 726b730e11SBram Moolenaarif exists("ruby_space_errors") 736b730e11SBram Moolenaar if !exists("ruby_no_trail_space_error") 746b730e11SBram Moolenaar syn match rubySpaceError display excludenl "\s\+$" 756b730e11SBram Moolenaar endif 766b730e11SBram Moolenaar if !exists("ruby_no_tab_space_error") 776b730e11SBram Moolenaar syn match rubySpaceError display " \+\t"me=e-1 786b730e11SBram Moolenaar endif 796b730e11SBram Moolenaarendif 806b730e11SBram Moolenaar 8189bcfda6SBram Moolenaar" Operators {{{1 82*2ed639abSBram Moolenaar 83*2ed639abSBram Moolenaarsyn match rubyEnglishBooleanOperator "\<\%(and\|or\|not\)\>" 84*2ed639abSBram Moolenaar 85*2ed639abSBram Moolenaarif exists("ruby_operators") || exists("ruby_pseudo_operators") 86*2ed639abSBram Moolenaar syn match rubyDotOperator "\.\|&\." 87*2ed639abSBram Moolenaar 88*2ed639abSBram Moolenaar syn match rubyTernaryOperator "\%(\w\|[^\x00-\x7F]\)\@1<!?\|:" 89*2ed639abSBram Moolenaar syn match rubyArithmeticOperator "\*\*\|[*/%+]\|->\@!" 90*2ed639abSBram Moolenaar syn match rubyComparisonOperator "<=>\|<=\|<\|>=\|[-=]\@1<!>" 91*2ed639abSBram Moolenaar syn match rubyBitwiseOperator "[~^|]\|&\.\@!\|<<\|>>" 92*2ed639abSBram Moolenaar syn match rubyBooleanOperator "\%(\w\|[^\x00-\x7F]\)\@1<!!\|&&\|||" 93*2ed639abSBram Moolenaar syn match rubyRangeOperator "\.\.\.\=" 94*2ed639abSBram Moolenaar syn match rubyAssignmentOperator "=>\@!\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|||=\||=\|%=\|+=\|>>=\|<<=\|\^=" 95*2ed639abSBram Moolenaar syn match rubyAssignmentOperator "=>\@!" containedin=rubyBlockParameterList " TODO: this is inelegant 96*2ed639abSBram Moolenaar syn match rubyEqualityOperator "===\|==\|!=\|!\~\|=\~" 97*2ed639abSBram Moolenaar 98*2ed639abSBram Moolenaar syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<=\[" end="]" contains=ALLBUT,@rubyNotTop 99*2ed639abSBram Moolenaar 100*2ed639abSBram Moolenaar syn match rubyScopeOperator "::" 101*2ed639abSBram Moolenaar syn match rubySuperClassOperator "<" contained 102*2ed639abSBram Moolenaar syn match rubyEigenClassOperator "<<" contained 103*2ed639abSBram Moolenaar syn match rubyLambdaOperator "->" 104*2ed639abSBram Moolenaar syn match rubySplatOperator "\%([[{(|,=]\_s*\)\@<=\*" 105*2ed639abSBram Moolenaar syn match rubySplatOperator "\%(^\|\s\)\@1<=\*\%(\h\|[^\x00-\x7F]\|[:$@[]\)\@=" 106*2ed639abSBram Moolenaar syn match rubyDoubleSplatOperator "\%([{(|,]\_s*\)\@<=\*\*" 107*2ed639abSBram Moolenaar syn match rubyDoubleSplatOperator "\s\@1<=\*\*\%(\h\|[^\x00-\x7F]\|[:$@{]\)\@=" 108*2ed639abSBram Moolenaar syn match rubyProcOperator "\%([[(|,]\_s*\)\@<=&" 109*2ed639abSBram Moolenaar syn match rubyProcOperator "\s\@1<=&\%(\h\|[^\x00-\x7F]\|[:$@]\|->\)\@=" 110*2ed639abSBram Moolenaar 111*2ed639abSBram Moolenaar syn cluster rubyProperOperator contains=rubyTernaryOperator,rubyArithmeticOperator,rubyComparisonOperator,rubyBitwiseOperator,rubyBooleanOperator,rubyRangeOperator,rubyAssignmentOperator,rubyEqualityOperator,rubyDefinedOperator,rubyEnglishBooleanOperator 112*2ed639abSBram Moolenaar syn cluster rubyClassOperator contains=rubyEigenClassOperator,rubySuperClassOperator 113*2ed639abSBram Moolenaar syn cluster rubyPseudoOperator contains=rubyDotOperator,rubyScopeOperator,rubyEigenClassOperator,rubySuperClassOperator,rubyLambdaOperator,rubySplatOperator,rubyDoubleSplatOperator,rubyProcOperator 114*2ed639abSBram Moolenaar syn cluster rubyOperator contains=ruby.*Operator 1159964e468SBram Moolenaarendif 1169964e468SBram Moolenaar 117*2ed639abSBram Moolenaar" String Interpolation and Backslash Notation {{{1 118c236c16dSBram Moolenaarsyn region rubyInterpolation matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop 119*2ed639abSBram Moolenaarsyn match rubyInterpolation "#\$\%(-\w\|[!$&"'*+,./0:;<>?@\`~_]\|\w\+\)" display contained contains=rubyInterpolationDelimiter,@rubyGlobalVariable 120*2ed639abSBram Moolenaarsyn match rubyInterpolation "#@@\=\w\+" display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable 121*2ed639abSBram Moolenaarsyn match rubyInterpolationDelimiter "#\ze[$@]" display contained 1226b730e11SBram Moolenaar 123*2ed639abSBram Moolenaarsyn match rubyStringEscape "\\\_." contained display 124*2ed639abSBram Moolenaarsyn match rubyStringEscape "\\\o\{1,3}\|\\x\x\{1,2}" contained display 125*2ed639abSBram Moolenaarsyn match rubyStringEscape "\\u\%(\x\{4}\|{\x\{1,6}\%(\s\+\x\{1,6}\)*}\)" contained display 126*2ed639abSBram Moolenaarsyn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=.\)" contained display 127*2ed639abSBram Moolenaar 128*2ed639abSBram Moolenaarsyn match rubyBackslashEscape "\\\\" contained display 129*2ed639abSBram Moolenaarsyn match rubyQuoteEscape "\\'" contained display 130*2ed639abSBram Moolenaarsyn match rubySpaceEscape "\\ " contained display 131*2ed639abSBram Moolenaar 132*2ed639abSBram Moolenaarsyn match rubyParenthesisEscape "\\[()]" contained display 133*2ed639abSBram Moolenaarsyn match rubyCurlyBraceEscape "\\[{}]" contained display 134*2ed639abSBram Moolenaarsyn match rubyAngleBracketEscape "\\[<>]" contained display 135*2ed639abSBram Moolenaarsyn match rubySquareBracketEscape "\\[[\]]" contained display 1366b730e11SBram Moolenaar 137c236c16dSBram Moolenaarsyn region rubyNestedParentheses start="(" skip="\\\\\|\\)" matchgroup=rubyString end=")" transparent contained 138c236c16dSBram Moolenaarsyn region rubyNestedCurlyBraces start="{" skip="\\\\\|\\}" matchgroup=rubyString end="}" transparent contained 139c236c16dSBram Moolenaarsyn region rubyNestedAngleBrackets start="<" skip="\\\\\|\\>" matchgroup=rubyString end=">" transparent contained 140c236c16dSBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" matchgroup=rubyString end="\]" transparent contained 1416b730e11SBram Moolenaar 142*2ed639abSBram Moolenaarsyn cluster rubySingleCharEscape contains=rubyBackslashEscape,rubyQuoteEscape,rubySpaceEscape,rubyParenthesisEscape,rubyCurlyBraceEscape,rubyAngleBracketEscape,rubySquareBracketEscape 143*2ed639abSBram Moolenaarsyn cluster rubyNestedBrackets contains=rubyNested.\+ 144*2ed639abSBram Moolenaarsyn cluster rubyStringSpecial contains=rubyInterpolation,rubyStringEscape 145*2ed639abSBram Moolenaarsyn cluster rubyStringNotTop contains=@rubyStringSpecial,@rubyNestedBrackets,@rubySingleCharEscape 146*2ed639abSBram Moolenaar 14789bcfda6SBram Moolenaar" Regular Expression Metacharacters {{{1 148*2ed639abSBram Moolenaarsyn region rubyRegexpComment matchgroup=rubyRegexpSpecial start="(?#" skip="\\\\\|\\)" end=")" contained 149*2ed639abSBram Moolenaarsyn region rubyRegexpParens matchgroup=rubyRegexpSpecial start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\\\\|\\)" end=")" contained transparent contains=@rubyRegexpSpecial 150*2ed639abSBram Moolenaarsyn region rubyRegexpBrackets matchgroup=rubyRegexpCharClass start="\[\^\=" skip="\\\\\|\\\]" end="\]" contained transparent contains=rubyRegexpBrackets,rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass,rubyRegexpIntersection oneline 151*2ed639abSBram Moolenaarsyn match rubyRegexpCharClass "\\[DdHhRSsWw]" contained display 152*2ed639abSBram Moolenaarsyn match rubyRegexpCharClass "\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|xdigit\):\]" contained 153*2ed639abSBram Moolenaarsyn match rubyRegexpCharClass "\\[pP]{^\=.\{-}}" contained display 154*2ed639abSBram Moolenaarsyn match rubyRegexpEscape "\\[].*?+^$|\\/(){}[]" contained " see commit e477f10 155c236c16dSBram Moolenaarsyn match rubyRegexpQuantifier "[*?+][?+]\=" contained display 156c236c16dSBram Moolenaarsyn match rubyRegexpQuantifier "{\d\+\%(,\d*\)\=}?\=" contained display 157c236c16dSBram Moolenaarsyn match rubyRegexpAnchor "[$^]\|\\[ABbGZz]" contained display 158*2ed639abSBram Moolenaarsyn match rubyRegexpDot "\.\|\\X" contained display 159*2ed639abSBram Moolenaarsyn match rubyRegexpIntersection "&&" contained display 160*2ed639abSBram Moolenaarsyn match rubyRegexpSpecial "\\K" contained display 161c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "|" contained display 162c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\[1-9]\d\=\d\@!" contained display 163c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display 164c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display 165c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\g<\%([a-z_]\w*\|-\=\d\+\)>" contained display 166c236c16dSBram Moolenaarsyn match rubyRegexpSpecial "\\g'\%([a-z_]\w*\|-\=\d\+\)'" contained display 167c236c16dSBram Moolenaar 168*2ed639abSBram Moolenaarsyn cluster rubyRegexpSpecial contains=@rubyStringSpecial,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment,rubyRegexpIntersection 169071d4279SBram Moolenaar 170*2ed639abSBram Moolenaar" Numbers {{{1 171*2ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*r\=i\=\>" display 172*2ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)r\=i\=\>" display 173*2ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*r\=i\=\>" display 174*2ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*r\=i\=\>" display 175*2ed639abSBram Moolenaarsyn match rubyFloat "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*r\=i\=\>" display 176*2ed639abSBram Moolenaarsyn match rubyFloat "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)i\=\>" display 177071d4279SBram Moolenaar 17889bcfda6SBram Moolenaar" Identifiers {{{1 179*2ed639abSBram Moolenaarsyn match rubyClassName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained 180*2ed639abSBram Moolenaarsyn match rubyModuleName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained 181*2ed639abSBram Moolenaarsyn match rubyConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" 182ec7944aaSBram Moolenaarsyn match rubyClassVariable "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display 183ec7944aaSBram Moolenaarsyn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display 184ec7944aaSBram Moolenaarsyn match rubyGlobalVariable "$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)" 185d09091d4SBram Moolenaarsyn match rubySymbolDelimiter ":" contained 186d09091d4SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!:\%(\^\|\~@\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!@\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" contains=rubySymbolDelimiter 187d09091d4SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" contains=rubySymbolDelimiter 188d09091d4SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contains=rubySymbolDelimiter 189d09091d4SBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\=" contains=rubySymbolDelimiter 19089bcfda6SBram Moolenaar 191*2ed639abSBram MoolenaarSynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape,rubyBackslashEscape 192*2ed639abSBram MoolenaarSynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial 193*2ed639abSBram Moolenaar 194*2ed639abSBram Moolenaarsyn match rubyCapitalizedMethod "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@=" 195*2ed639abSBram Moolenaar 196*2ed639abSBram Moolenaarsyn region rubyParentheses start="(" end=")" contains=ALLBUT,@rubyNotTop containedin=rubyBlockParameterList 197*2ed639abSBram Moolenaarsyn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\_s*\)\@32<=|" end="|" contains=ALLBUT,@rubyNotTop,@rubyProperOperator 198*2ed639abSBram Moolenaar 199*2ed639abSBram Moolenaarif exists('ruby_global_variable_error') 200*2ed639abSBram Moolenaar syn match rubyGlobalVariableError "$[^A-Za-z_]" display 201*2ed639abSBram Moolenaar syn match rubyGlobalVariableError "$-[^0FIKWadilpvw]" display 20289bcfda6SBram Moolenaarendif 20389bcfda6SBram Moolenaar 204*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<>?@\`~]# 205ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable "$\d\+" display 2066b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>" display 207*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIWadilpvw]\>" display 208*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$\%(stderr\|stdin\|stdout\)\>" display 209*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display 210*2ed639abSBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(ARGF\|ARGV\|ENV\|DATA\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\)\>\%(\s*(\)\@!" 21189bcfda6SBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!" 212071d4279SBram Moolenaar 213*2ed639abSBram Moolenaar" Deprecated/removed in 1.9 214*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$=" 215*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$-K\>" display 216*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\)\>" display 217*2ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$KCODE\>" display 218*2ed639abSBram Moolenaar" Deprecated/removed in 2.4 219*2ed639abSBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(FALSE\|NIL\|TRUE\)\>\%(\s*(\)\@!" 220c236c16dSBram Moolenaar 221*2ed639abSBram Moolenaarsyn cluster rubyGlobalVariable contains=rubyGlobalVariable,rubyPredefinedVariable,rubyGlobalVariableError 2226b730e11SBram Moolenaar 223*2ed639abSBram Moolenaar" Normal Regular Expressions {{{1 224*2ed639abSBram MoolenaarSynFold '/' syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,{[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite 225*2ed639abSBram MoolenaarSynFold '/' syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\s\+\)\@<=/\%(=\|\_s\)\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite 226*2ed639abSBram Moolenaar 227*2ed639abSBram Moolenaar" Generalized Regular Expressions {{{1 228*2ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite 229*2ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r{" end="}[iomxneus]*" skip="\\\\\|\\}" contains=@rubyRegexpSpecial 230*2ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r<" end=">[iomxneus]*" skip="\\\\\|\\>" contains=@rubyRegexpSpecial,rubyNestedAngleBrackets 231*2ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\[" end="\][iomxneus]*" skip="\\\\\|\\\]" contains=@rubyRegexpSpecial 232*2ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r(" end=")[iomxneus]*" skip="\\\\\|\\)" contains=@rubyRegexpSpecial 233*2ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z(\s\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial 234*2ed639abSBram Moolenaar 235*2ed639abSBram Moolenaar" Characters {{{1 236*2ed639abSBram Moolenaarsyn match rubyCharacter "\%(\w\|[^\x00-\x7F]\|[]})\"'/]\)\@1<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\[[:space:]]\|\\\=[^[:space:]]\)\)" 237*2ed639abSBram Moolenaarsyn match rubyCharacter "\%(\w\|[^\x00-\x7F]\|[]})\"'/]\)\@1<!?\\u\%(\x\{4}\|{\x\{1,6}}\)" 238*2ed639abSBram Moolenaar 239*2ed639abSBram Moolenaar" Normal Strings {{{1 24089bcfda6SBram Moolenaarlet s:spell_cluster = exists('ruby_spellcheck_strings') ? ',@Spell' : '' 241*2ed639abSBram Moolenaarlet s:fold_arg = s:foldable('string') ? ' fold' : '' 242*2ed639abSBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial' . s:spell_cluster . s:fold_arg 243*2ed639abSBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="''" end="''" skip="\\\\\|\\''" contains=rubyQuoteEscape,rubyBackslashEscape' . s:spell_cluster . s:fold_arg 244*2ed639abSBram Moolenaarunlet s:spell_cluster s:fold_arg 24589bcfda6SBram Moolenaar 24689bcfda6SBram Moolenaar" Shell Command Output {{{1 247*2ed639abSBram MoolenaarSynFold 'string' syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial 248*2ed639abSBram Moolenaar 249*2ed639abSBram Moolenaar" Generalized Single Quoted Strings, Symbols, Array of Strings and Array of Symbols {{{1 250*2ed639abSBram Moolenaar 251*2ed639abSBram Moolenaar" Non-bracket punctuation delimiters {{{2 252*2ed639abSBram Moolenaarlet s:names = { '~': 'Tilde', '`': 'BackQuote', '!': 'Bang', '@': 'At', '#': 'Hash', '$': 'Dollar', '%': 'Percent', '^': 'Caret', 253*2ed639abSBram Moolenaar \ '&': 'Ampersand', '*': 'Asterix', '_': 'Underscore', '-': 'Dash', '+': 'Plus', '=': 'Equals', '|': 'Bar', 254*2ed639abSBram Moolenaar \ '\': 'Backslash', ':': 'Colon', ';': 'Semicolon', '"': 'DoubleQuote', "'": 'Quote', ',': 'Comma', '.': 'Period', 255*2ed639abSBram Moolenaar \ '?': 'QuestionMark', '/': 'ForwardSlash' } 256*2ed639abSBram Moolenaar 257*2ed639abSBram Moolenaarfor s:delimiter in keys(s:names) 258*2ed639abSBram Moolenaar let s:group = 'ruby' . s:names[s:delimiter] . 'Escape' 259*2ed639abSBram Moolenaar 260*2ed639abSBram Moolenaar if s:delimiter =~ '[\"]' 261*2ed639abSBram Moolenaar let s:delimiter = '\' . s:delimiter 26289bcfda6SBram Moolenaar endif 2636b730e11SBram Moolenaar 264*2ed639abSBram Moolenaar exe 'syn match ' . s:group . ' "\V\\' . s:delimiter . '" contained display' 265*2ed639abSBram Moolenaar exe 'syn cluster rubySingleCharEscape add=' . s:group 266*2ed639abSBram Moolenaar exe 'SynFold ''%'' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\V%q' . s:delimiter . '" end="\V' . s:delimiter . '" skip="\V\\\\\|\\' . s:delimiter . '" contains=rubyBackslashEscape,' . s:group . ' nextgroup=@rubyModifier skipwhite' 267*2ed639abSBram Moolenaar exe 'SynFold ''%'' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\V%w' . s:delimiter . '" end="\V' . s:delimiter . '" skip="\V\\\\\|\\' . s:delimiter . '" contains=rubyBackslashEscape,rubySpaceEscape,' . s:group . ' nextgroup=@rubyModifier skipwhite' 268*2ed639abSBram Moolenaar exe 'SynFold ''%'' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="\V%s' . s:delimiter . '" end="\V' . s:delimiter . '" skip="\V\\\\\|\\' . s:delimiter . '" contains=rubyBackslashEscape,' . s:group . ' nextgroup=@rubyModifier skipwhite' 269*2ed639abSBram Moolenaar exe 'SynFold ''%'' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="\V%i' . s:delimiter . '" end="\V' . s:delimiter . '" skip="\V\\\\\|\\' . s:delimiter . '" contains=rubyBackslashEscape,rubySpaceEscape,' . s:group . ' nextgroup=@rubyModifier skipwhite' 270*2ed639abSBram Moolenaar exe 'hi def link ' . s:group . ' rubyStringEscape' 271*2ed639abSBram Moolenaarendfor 2726b730e11SBram Moolenaar 273*2ed639abSBram Moolenaarunlet s:delimiter s:group s:names 274*2ed639abSBram Moolenaar" }}}2 275071d4279SBram Moolenaar 276*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces 277*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets 278*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets 279*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses 280*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape 281071d4279SBram Moolenaar 282*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces 283*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets 284*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets 285*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses 2866b730e11SBram Moolenaar 287*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces 288*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets 289*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets 290*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses 291*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentSymbolDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape 2926b730e11SBram Moolenaar 293*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces 294*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets 295*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets 296*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses 29789bcfda6SBram Moolenaar 298*2ed639abSBram Moolenaar" Generalized Double Quoted Strings, Array of Strings, Array of Symbols and Shell Command Output {{{1 299*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\%(\%(\w\|[^\x00-\x7F]\|]\)\s*\)\@<!%=" end="=" skip="\\\\\|\\=" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite 300*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite 301*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite 302*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces 303*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets 304*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets 305*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses 306*2ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[Qx]\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial 30789bcfda6SBram Moolenaar 308*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite 309*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I{" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces 310*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets 311*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets 312*2ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses 31389bcfda6SBram Moolenaar 314*2ed639abSBram Moolenaar" Here Documents {{{1 315*2ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 31689bcfda6SBram Moolenaar 317*2ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 318*2ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 319*2ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 320*2ed639abSBram Moolenaar 321*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 322*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 323*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart keepend 324*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 325*2ed639abSBram Moolenaar 326*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 327*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 328*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart keepend 329*2ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 330071d4279SBram Moolenaar 33189bcfda6SBram Moolenaar" Module, Class, Method and Alias Declarations {{{1 332*2ed639abSBram Moolenaarsyn match rubyAliasDeclaration "[^[:space:];#.()]\+" contained contains=rubySymbol,@rubyGlobalVariable nextgroup=rubyAliasDeclaration2 skipwhite 333*2ed639abSBram Moolenaarsyn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,@rubyGlobalVariable 3349964e468SBram Moolenaarsyn match rubyMethodDeclaration "[^[:space:];#(]\+" contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable 335*2ed639abSBram Moolenaarsyn match rubyClassDeclaration "[^[:space:];#<]\+" contained contains=rubyClassName,rubyScopeOperator nextgroup=rubySuperClassOperator skipwhite skipnl 336*2ed639abSBram Moolenaarsyn match rubyModuleDeclaration "[^[:space:];#<]\+" contained contains=rubyModuleName,rubyScopeOperator 337c1762ccbSBram Moolenaar 338*2ed639abSBram Moolenaarsyn match rubyMethodName "\<\%([_[:alpha:]]\|[^\x00-\x7F]\)\%([_[:alnum:]]\|[^\x00-\x7F]\)*[?!=]\=\%([[:alnum:]_.:?!=]\|[^\x00-\x7F]\)\@!" contained containedin=rubyMethodDeclaration 339*2ed639abSBram Moolenaarsyn match rubyMethodName "\%(\s\|^\)\@1<=\%([_[:alpha:]]\|[^\x00-\x7F]\)\%([_[:alnum:]]\|[^\x00-\x7F]\)*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2 340*2ed639abSBram Moolenaarsyn match rubyMethodName "\%([[:space:].]\|^\)\@1<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration 341*2ed639abSBram Moolenaar 342*2ed639abSBram Moolenaarsyn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyMethodName 343c236c16dSBram Moolenaar 34489bcfda6SBram Moolenaar" Keywords {{{1 345*2ed639abSBram Moolenaar" TODO: reorganise 346*2ed639abSBram Moolenaarsyn match rubyControl "\%#=1\<\%(break\|in\|next\|redo\|retry\|return\)\>" 347*2ed639abSBram Moolenaarsyn match rubyKeyword "\%#=1\<\%(super\|yield\)\>" 348*2ed639abSBram Moolenaarsyn match rubyBoolean "\%#=1\<\%(true\|false\)\>[?!]\@!" 349*2ed639abSBram Moolenaarsyn match rubyPseudoVariable "\%#=1\<\(self\|nil\)\>[?!]\@!" 350*2ed639abSBram Moolenaarsyn match rubyPseudoVariable "\%#=1\<__\%(ENCODING\|dir\|FILE\|LINE\|callee\|method\)__\>" 351*2ed639abSBram Moolenaarsyn match rubyBeginEnd "\%#=1\<\%(BEGIN\|END\)\>" 3521d68952aSBram Moolenaar 35389bcfda6SBram Moolenaar" Expensive Mode {{{1 35489bcfda6SBram Moolenaar" Match 'end' with the appropriate opening keyword for syntax based folding 35589bcfda6SBram Moolenaar" and special highlighting of module/class/method definitions 356d5cdbeb8SBram Moolenaarif !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive") 3579964e468SBram Moolenaar syn match rubyDefine "\<alias\>" nextgroup=rubyAliasDeclaration skipwhite skipnl 3589964e468SBram Moolenaar syn match rubyDefine "\<def\>" nextgroup=rubyMethodDeclaration skipwhite skipnl 359d09091d4SBram Moolenaar syn match rubyDefine "\<undef\>" nextgroup=rubyMethodName skipwhite skipnl 360*2ed639abSBram Moolenaar syn match rubyClass "\<class\>" nextgroup=rubyClassDeclaration,rubyEigenClassOperator skipwhite skipnl 3619964e468SBram Moolenaar syn match rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl 3621d68952aSBram Moolenaar 363*2ed639abSBram Moolenaar SynFold 'def' syn region rubyMethodBlock start="\<def\>" matchgroup=rubyDefine skip="\<end:\|\%(\<def\_s\+\)\@<=end\>" end="\<end\>" contains=ALLBUT,@rubyNotTop 364*2ed639abSBram Moolenaar SynFold 'class' syn region rubyClassBlock start="\<class\>" matchgroup=rubyClass skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 365*2ed639abSBram Moolenaar SynFold 'module' syn region rubyModuleBlock start="\<module\>" matchgroup=rubyModule skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 366071d4279SBram Moolenaar 3676b730e11SBram Moolenaar " modifiers 368*2ed639abSBram Moolenaar syn match rubyLineContinuation "\\$" nextgroup=@rubyModifier skipwhite skipnl 36989bcfda6SBram Moolenaar syn match rubyConditionalModifier "\<\%(if\|unless\)\>" 37089bcfda6SBram Moolenaar syn match rubyRepeatModifier "\<\%(while\|until\)\>" 371*2ed639abSBram Moolenaar syn match rubyRescueModifier "\<rescue\>" 372071d4279SBram Moolenaar 373*2ed639abSBram Moolenaar syn cluster rubyModifier contains=rubyConditionalModifier,rubyRepeatModifier,rubyRescueModifier 374*2ed639abSBram Moolenaar 375*2ed639abSBram Moolenaar SynFold 'do' syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 37689bcfda6SBram Moolenaar 377c1762ccbSBram Moolenaar " curly bracket block or hash literal 378*2ed639abSBram Moolenaar SynFold '{' syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop 379*2ed639abSBram Moolenaar SynFold '[' syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<!\[" end="]" contains=ALLBUT,@rubyNotTop 380071d4279SBram Moolenaar 381c1762ccbSBram Moolenaar " statements without 'do' 382*2ed639abSBram Moolenaar SynFold 'begin' syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 383*2ed639abSBram Moolenaar SynFold 'case' syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 38489bcfda6SBram Moolenaar 385*2ed639abSBram Moolenaar SynFold 'if' syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\<then\s\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 38689bcfda6SBram Moolenaar 387*2ed639abSBram Moolenaar syn match rubyConditional "\<\%(then\|else\|when\)\>" contained containedin=rubyCaseExpression 388*2ed639abSBram Moolenaar syn match rubyConditional "\<\%(then\|else\|elsif\)\>" contained containedin=rubyConditionalExpression 389071d4279SBram Moolenaar 390*2ed639abSBram Moolenaar syn match rubyExceptionHandler "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyBlockExpression,rubyDoBlock 391*2ed639abSBram Moolenaar syn match rubyExceptionHandler2 "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyModuleBlock,rubyClassBlock,rubyMethodBlock 392*2ed639abSBram Moolenaar syn cluster rubyExceptionHandler contains=rubyExceptionHandler,rubyExceptionHandler2 3931d68952aSBram Moolenaar 394c1762ccbSBram Moolenaar " statements with optional 'do' 395*2ed639abSBram Moolenaar syn region rubyOptionalDoLine matchgroup=rubyRepeat start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@<![!?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyOptionalDo end="\<do\>" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop 39689bcfda6SBram Moolenaar 397*2ed639abSBram Moolenaar SynFold 'for' syn region rubyRepeatExpression start="\<for\>" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\@<![!?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine 398071d4279SBram Moolenaar 399071d4279SBram Moolenaar if !exists("ruby_minlines") 400ec7944aaSBram Moolenaar let ruby_minlines = 500 401071d4279SBram Moolenaar endif 402*2ed639abSBram Moolenaar exe "syn sync minlines=" . ruby_minlines 403071d4279SBram Moolenaar 4046b730e11SBram Moolenaarelse 405*2ed639abSBram Moolenaar syn match rubyControl "\<def\>" nextgroup=rubyMethodDeclaration skipwhite skipnl 406*2ed639abSBram Moolenaar syn match rubyControl "\<class\>" nextgroup=rubyClassDeclaration skipwhite skipnl 407*2ed639abSBram Moolenaar syn match rubyControl "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl 408*2ed639abSBram Moolenaar syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|rescue\|ensure\|then\|when\|end\)\>" 409*2ed639abSBram Moolenaar syn match rubyKeyword "\<\%(alias\|undef\)\>" 4106b730e11SBram Moolenaarendif 411071d4279SBram Moolenaar 41289bcfda6SBram Moolenaar" Special Methods {{{1 4136b730e11SBram Moolenaarif !exists("ruby_no_special_methods") 414*2ed639abSBram Moolenaar syn match rubyAccess "\<\%(public\|protected\|private\)\>" " use re=2 415*2ed639abSBram Moolenaar syn match rubyAccess "\%#=1\<\%(public\|private\)_class_method\>" 416*2ed639abSBram Moolenaar syn match rubyAccess "\%#=1\<\%(public\|private\)_constant\>" 417*2ed639abSBram Moolenaar syn match rubyAccess "\%#=1\<module_function\>" 418*2ed639abSBram Moolenaar syn match rubyAttribute "\%#=1\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!" " attr is a common variable name 419*2ed639abSBram Moolenaar syn match rubyAttribute "\%#=1\<attr_\%(accessor\|reader\|writer\)\>" 420*2ed639abSBram Moolenaar syn match rubyControl "\%#=1\<\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>" 421*2ed639abSBram Moolenaar syn match rubyEval "\%#=1\<eval\>" 422*2ed639abSBram Moolenaar syn match rubyEval "\%#=1\<\%(class\|instance\|module\)_eval\>" 423*2ed639abSBram Moolenaar syn match rubyException "\%#=1\<\%(raise\|fail\|catch\|throw\)\>" 424*2ed639abSBram Moolenaar syn match rubyInclude "\%#=1\<\%(autoload\|gem\|load\|require\%(_relative\)\=\)\>" 425*2ed639abSBram Moolenaar syn match rubyKeyword "\%#=1\<\%(callcc\|caller\|lambda\|proc\)\>" 426*2ed639abSBram Moolenaar syn match rubyMacro "\%#=1\<\%(extend\|include\|prepend\|refine\|using\)\>" 427*2ed639abSBram Moolenaar syn match rubyMacro "\%#=1\<\%(alias\|define\|define_singleton\|remove\|undef\)_method\>" 428071d4279SBram Moolenaarendif 429071d4279SBram Moolenaar 43089bcfda6SBram Moolenaar" Comments and Documentation {{{1 4316b730e11SBram Moolenaarsyn match rubySharpBang "\%^#!.*" display 43289bcfda6SBram Moolenaarsyn keyword rubyTodo FIXME NOTE TODO OPTIMIZE HACK REVIEW XXX todo contained 433*2ed639abSBram Moolenaarsyn match rubyEncoding "[[:alnum:]-]\+" contained display 434*2ed639abSBram Moolenaarsyn match rubyMagicComment "\c\%<3l#\s*\zs\%(coding\|encoding\):" contained nextgroup=rubyEncoding skipwhite 435*2ed639abSBram Moolenaarsyn match rubyMagicComment "\c\%<10l#\s*\zs\%(frozen_string_literal\|warn_indent\|warn_past_scope\):" contained nextgroup=rubyBoolean skipwhite 436*2ed639abSBram Moolenaarsyn match rubyComment "#.*" contains=@rubyCommentSpecial,rubySpaceError,@Spell 437*2ed639abSBram Moolenaar 438*2ed639abSBram Moolenaarsyn cluster rubyCommentSpecial contains=rubySharpBang,rubyTodo,rubyMagicComment 439*2ed639abSBram Moolenaarsyn cluster rubyCommentNotTop contains=@rubyCommentSpecial,rubyEncoding 440*2ed639abSBram Moolenaar 44189bcfda6SBram Moolenaarif !exists("ruby_no_comment_fold") && s:foldable('#') 44289bcfda6SBram Moolenaar syn region rubyMultilineComment start="^\s*#.*\n\%(^\s*#\)\@=" end="^\s*#.*\n\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend 443ec7944aaSBram Moolenaar syn region rubyDocumentation start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold 4449964e468SBram Moolenaarelse 4459964e468SBram Moolenaar syn region rubyDocumentation start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell 4469964e468SBram Moolenaarendif 4476b730e11SBram Moolenaar 448*2ed639abSBram Moolenaar" {{{1 Useless Line Continuations 449*2ed639abSBram Moolenaarsyn match rubyUselessLineContinuation "\%([.:,;{([<>~\*%&^|+=-]\|%(\%(\w\|[^\x00-\x7F]\)\@1<![?!]\)\s*\zs\\$" nextgroup=rubyUselessLineContinuation skipwhite skipempty 450*2ed639abSBram Moolenaarsyn match rubyUselessLineContinuation "\\$" nextgroup=rubyUselessLineContinuation skipwhite skipempty contained 4516b730e11SBram Moolenaar 452*2ed639abSBram Moolenaar" Keyword Nobbling {{{1 453*2ed639abSBram Moolenaar" prevent methods with keyword names being highlighted as keywords when called 454*2ed639abSBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@1<!\.\)\|&\.\|::\)\_s*\%([_[:lower:]][_[:alnum:]]*\|\%(BEGIN\|END\)\>\)" transparent contains=rubyDotOperator,rubyScopeOperator 455*2ed639abSBram Moolenaar 456*2ed639abSBram Moolenaar" Bang and Predicate Methods and Operators {{{1 457*2ed639abSBram Moolenaarsyn match rubyBangPredicateMethod "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]" 458*2ed639abSBram Moolenaar 459*2ed639abSBram Moolenaarif !exists("ruby_no_special_methods") 460*2ed639abSBram Moolenaar syn match rubyControl "\%#=1\<exit!" display 461*2ed639abSBram Moolenaarendif 462*2ed639abSBram Moolenaarsyn match rubyDefinedOperator "\%#=1\<defined?" display 463*2ed639abSBram Moolenaar 464*2ed639abSBram Moolenaar" 1.9-style Hash Keys and Keyword Parameters {{{1 465*2ed639abSBram Moolenaarsyn match rubySymbol "\%([{(|,]\_s*\)\@<=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]\=::\@!"he=e-1 466*2ed639abSBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],;]\@="he=e-1 467*2ed639abSBram Moolenaarsyn match rubySymbol "[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],;]\@="hs=s+1,he=e-1 468c236c16dSBram Moolenaar 46989bcfda6SBram Moolenaar" __END__ Directive {{{1 470*2ed639abSBram MoolenaarSynFold '__END__' syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" 471071d4279SBram Moolenaar 47289bcfda6SBram Moolenaar" Default Highlighting {{{1 473c1762ccbSBram Moolenaarhi def link rubyClass rubyDefine 474c1762ccbSBram Moolenaarhi def link rubyModule rubyDefine 475*2ed639abSBram Moolenaarhi def link rubyExceptionHandler2 rubyDefine 476c1762ccbSBram Moolenaarhi def link rubyDefine Define 477d09091d4SBram Moolenaarhi def link rubyAccess rubyMacro 478d09091d4SBram Moolenaarhi def link rubyAttribute rubyMacro 479d09091d4SBram Moolenaarhi def link rubyMacro Macro 480d09091d4SBram Moolenaarhi def link rubyMethodName rubyFunction 481c1762ccbSBram Moolenaarhi def link rubyFunction Function 482c1762ccbSBram Moolenaarhi def link rubyConditional Conditional 483c1762ccbSBram Moolenaarhi def link rubyConditionalModifier rubyConditional 484*2ed639abSBram Moolenaarhi def link rubyExceptionHandler rubyConditional 485*2ed639abSBram Moolenaarhi def link rubyRescueModifier rubyExceptionHandler 486c1762ccbSBram Moolenaarhi def link rubyRepeat Repeat 487c1762ccbSBram Moolenaarhi def link rubyRepeatModifier rubyRepeat 488c1762ccbSBram Moolenaarhi def link rubyOptionalDo rubyRepeat 489c1762ccbSBram Moolenaarhi def link rubyControl Statement 490c1762ccbSBram Moolenaarhi def link rubyInclude Include 491c1762ccbSBram Moolenaarhi def link rubyInteger Number 492*2ed639abSBram Moolenaarhi def link rubyCharacter Character 493c1762ccbSBram Moolenaarhi def link rubyFloat Float 494c1762ccbSBram Moolenaarhi def link rubyBoolean Boolean 495c1762ccbSBram Moolenaarhi def link rubyException Exception 4966b730e11SBram Moolenaarif !exists("ruby_no_identifiers") 497c1762ccbSBram Moolenaar hi def link rubyIdentifier Identifier 4986b730e11SBram Moolenaarelse 499c1762ccbSBram Moolenaar hi def link rubyIdentifier NONE 5006b730e11SBram Moolenaarendif 501c1762ccbSBram Moolenaarhi def link rubyClassVariable rubyIdentifier 502c1762ccbSBram Moolenaarhi def link rubyConstant Type 503d09091d4SBram Moolenaarhi def link rubyClassName rubyConstant 504d09091d4SBram Moolenaarhi def link rubyModuleName rubyConstant 505c1762ccbSBram Moolenaarhi def link rubyGlobalVariable rubyIdentifier 506c1762ccbSBram Moolenaarhi def link rubyInstanceVariable rubyIdentifier 507c1762ccbSBram Moolenaarhi def link rubyPredefinedIdentifier rubyIdentifier 508c1762ccbSBram Moolenaarhi def link rubyPredefinedConstant rubyPredefinedIdentifier 509c1762ccbSBram Moolenaarhi def link rubyPredefinedVariable rubyPredefinedIdentifier 510c1762ccbSBram Moolenaarhi def link rubySymbol Constant 511c1762ccbSBram Moolenaarhi def link rubyKeyword Keyword 512*2ed639abSBram Moolenaar 513c1762ccbSBram Moolenaarhi def link rubyOperator Operator 514*2ed639abSBram Moolenaarhi def link rubyDefinedOperator rubyOperator 515*2ed639abSBram Moolenaarhi def link rubyEnglishBooleanOperator rubyOperator 516*2ed639abSBram Moolenaarif exists("ruby_operators") 517*2ed639abSBram Moolenaar hi def link rubyTernaryOperator rubyOperator 518*2ed639abSBram Moolenaar hi def link rubyArithmeticOperator rubyOperator 519*2ed639abSBram Moolenaar hi def link rubyComparisonOperator rubyOperator 520*2ed639abSBram Moolenaar hi def link rubyBitwiseOperator rubyOperator 521*2ed639abSBram Moolenaar hi def link rubyBooleanOperator rubyOperator 522*2ed639abSBram Moolenaar hi def link rubyRangeOperator rubyOperator 523*2ed639abSBram Moolenaar hi def link rubyAssignmentOperator rubyOperator 524*2ed639abSBram Moolenaar hi def link rubyEqualityOperator rubyOperator 525*2ed639abSBram Moolenaarendif 526*2ed639abSBram Moolenaar 527*2ed639abSBram Moolenaarif exists("ruby_pseudo_operators") 528*2ed639abSBram Moolenaar hi def link rubyPseudoOperator Special 529*2ed639abSBram Moolenaar hi def link rubyDotOperator rubyPseudoOperator 530*2ed639abSBram Moolenaar hi def link rubyScopeOperator rubyPseudoOperator 531*2ed639abSBram Moolenaar hi def link rubySuperClassOperator rubyPseudoOperator 532*2ed639abSBram Moolenaar hi def link rubyEigenClassOperator rubyPseudoOperator 533*2ed639abSBram Moolenaar hi def link rubyLambdaOperator rubyPseudoOperator 534*2ed639abSBram Moolenaar hi def link rubyDoubleSplatOperator rubyPseudoOperator 535*2ed639abSBram Moolenaar hi def link rubySplatOperator rubyPseudoOperator 536*2ed639abSBram Moolenaar hi def link rubyProcOperator rubyPseudoOperator 537*2ed639abSBram Moolenaarendif 538*2ed639abSBram Moolenaar 539c1762ccbSBram Moolenaarhi def link rubyBeginEnd Statement 540c1762ccbSBram Moolenaarhi def link rubyEval Statement 541c1762ccbSBram Moolenaarhi def link rubyPseudoVariable Constant 542*2ed639abSBram Moolenaarhi def link rubyCapitalizedMethod NONE 543071d4279SBram Moolenaar 544c1762ccbSBram Moolenaarhi def link rubyComment Comment 545*2ed639abSBram Moolenaarhi def link rubyEncoding Constant 546*2ed639abSBram Moolenaarhi def link rubyMagicComment SpecialComment 547c1762ccbSBram Moolenaarhi def link rubyData Comment 548c1762ccbSBram Moolenaarhi def link rubyDataDirective Delimiter 549c1762ccbSBram Moolenaarhi def link rubyDocumentation Comment 550c236c16dSBram Moolenaarhi def link rubyTodo Todo 551c236c16dSBram Moolenaar 552*2ed639abSBram Moolenaarhi def link rubyBackslashEscape rubyStringEscape 5531d68952aSBram Moolenaarhi def link rubyQuoteEscape rubyStringEscape 554*2ed639abSBram Moolenaarhi def link rubySpaceEscape rubyStringEscape 555*2ed639abSBram Moolenaarhi def link rubyParenthesisEscape rubyStringEscape 556*2ed639abSBram Moolenaarhi def link rubyCurlyBraceEscape rubyStringEscape 557*2ed639abSBram Moolenaarhi def link rubyAngleBracketEscape rubyStringEscape 558*2ed639abSBram Moolenaarhi def link rubySquareBracketEscape rubyStringEscape 559c236c16dSBram Moolenaarhi def link rubyStringEscape Special 560*2ed639abSBram Moolenaar 561c1762ccbSBram Moolenaarhi def link rubyInterpolationDelimiter Delimiter 562c1762ccbSBram Moolenaarhi def link rubySharpBang PreProc 563*2ed639abSBram Moolenaarhi def link rubyStringDelimiter Delimiter 564*2ed639abSBram Moolenaarhi def link rubyHeredocDelimiter rubyStringDelimiter 565*2ed639abSBram Moolenaarhi def link rubyPercentRegexpDelimiter rubyRegexpDelimiter 566*2ed639abSBram Moolenaarhi def link rubyPercentStringDelimiter rubyStringDelimiter 567*2ed639abSBram Moolenaarhi def link rubyPercentSymbolDelimiter rubySymbolDelimiter 568c1762ccbSBram Moolenaarhi def link rubyRegexpDelimiter rubyStringDelimiter 56989bcfda6SBram Moolenaarhi def link rubySymbolDelimiter rubySymbol 570c1762ccbSBram Moolenaarhi def link rubyString String 571c236c16dSBram Moolenaarhi def link rubyRegexpEscape rubyRegexpSpecial 572c236c16dSBram Moolenaarhi def link rubyRegexpQuantifier rubyRegexpSpecial 573c236c16dSBram Moolenaarhi def link rubyRegexpAnchor rubyRegexpSpecial 574c236c16dSBram Moolenaarhi def link rubyRegexpDot rubyRegexpCharClass 575c236c16dSBram Moolenaarhi def link rubyRegexpCharClass rubyRegexpSpecial 576*2ed639abSBram Moolenaarhi def link rubyRegexpIntersection rubyRegexpSpecial 577c236c16dSBram Moolenaarhi def link rubyRegexpSpecial Special 578c236c16dSBram Moolenaarhi def link rubyRegexpComment Comment 579c236c16dSBram Moolenaarhi def link rubyRegexp rubyString 5806b730e11SBram Moolenaar 581c1762ccbSBram Moolenaarhi def link rubyError Error 582*2ed639abSBram Moolenaarif exists("ruby_line_continuation_error") 583*2ed639abSBram Moolenaar hi def link rubyUselessLineContinuation rubyError 584*2ed639abSBram Moolenaarendif 585*2ed639abSBram Moolenaarhi def link rubyGlobalVariableError rubyError 586c1762ccbSBram Moolenaarhi def link rubySpaceError rubyError 587071d4279SBram Moolenaar 58889bcfda6SBram Moolenaar" Postscript {{{1 589071d4279SBram Moolenaarlet b:current_syntax = "ruby" 590071d4279SBram Moolenaar 59189bcfda6SBram Moolenaarlet &cpo = s:cpo_sav 59289bcfda6SBram Moolenaarunlet! s:cpo_sav 59389bcfda6SBram Moolenaar 594*2ed639abSBram Moolenaardelc SynFold 595*2ed639abSBram Moolenaar 59689bcfda6SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: 597