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*4d8f4761SBram Moolenaar" Last Change: 2021 Jun 06 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 222ed639abSBram Moolenaar" eRuby Config {{{1 232ed639abSBram Moolenaarif exists('main_syntax') && main_syntax == 'eruby' 242ed639abSBram Moolenaar let b:ruby_no_expensive = 1 252ed639abSBram Moolenaarendif 262ed639abSBram 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 412ed639abSBram Moolenaar if index(s:foldable_groups, 'NONE') > -1 422ed639abSBram Moolenaar return 0 432ed639abSBram Moolenaar endif 442ed639abSBram 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 562ed639abSBram Moolenaarendfunction 5789bcfda6SBram Moolenaar 582ed639abSBram Moolenaarfunction! s:run_syntax_fold(args) abort 592ed639abSBram Moolenaar let [_0, _1, groups, cmd; _] = matchlist(a:args, '\(["'']\)\(.\{-}\)\1\s\+\(.*\)') 602ed639abSBram Moolenaar if call('s:foldable', split(groups)) 612ed639abSBram Moolenaar let cmd .= ' fold' 622ed639abSBram Moolenaar endif 632ed639abSBram Moolenaar exe cmd 642ed639abSBram Moolenaarendfunction 652ed639abSBram Moolenaar 662ed639abSBram Moolenaarcom! -nargs=* SynFold call s:run_syntax_fold(<q-args>) 672ed639abSBram Moolenaar 682ed639abSBram Moolenaar" Not-Top Cluster {{{1 69*4d8f4761SBram Moolenaarsyn cluster rubyNotTop contains=@rubyCommentNotTop,@rubyStringNotTop,@rubyRegexpSpecial,@rubyDeclaration,@rubyExceptionHandler,@rubyClassOperator,rubyConditional,rubyModuleName,rubyClassName,rubySymbolDelimiter,rubyParentheses,@Spell 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 822ed639abSBram Moolenaar 832ed639abSBram Moolenaarsyn match rubyEnglishBooleanOperator "\<\%(and\|or\|not\)\>" 842ed639abSBram Moolenaar 852ed639abSBram Moolenaarif exists("ruby_operators") || exists("ruby_pseudo_operators") 862ed639abSBram Moolenaar syn match rubyDotOperator "\.\|&\." 872ed639abSBram Moolenaar 882ed639abSBram Moolenaar syn match rubyTernaryOperator "\%(\w\|[^\x00-\x7F]\)\@1<!?\|:" 892ed639abSBram Moolenaar syn match rubyArithmeticOperator "\*\*\|[*/%+]\|->\@!" 902ed639abSBram Moolenaar syn match rubyComparisonOperator "<=>\|<=\|<\|>=\|[-=]\@1<!>" 912ed639abSBram Moolenaar syn match rubyBitwiseOperator "[~^|]\|&\.\@!\|<<\|>>" 922ed639abSBram Moolenaar syn match rubyBooleanOperator "\%(\w\|[^\x00-\x7F]\)\@1<!!\|&&\|||" 932ed639abSBram Moolenaar syn match rubyRangeOperator "\.\.\.\=" 942ed639abSBram Moolenaar syn match rubyAssignmentOperator "=>\@!\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|||=\||=\|%=\|+=\|>>=\|<<=\|\^=" 95*4d8f4761SBram Moolenaar syn match rubyAssignmentOperator "=>\@!" contained containedin=rubyBlockParameterList " TODO: this is inelegant 962ed639abSBram Moolenaar syn match rubyEqualityOperator "===\|==\|!=\|!\~\|=\~" 972ed639abSBram Moolenaar 982ed639abSBram Moolenaar syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<=\[" end="]" contains=ALLBUT,@rubyNotTop 992ed639abSBram Moolenaar 1002ed639abSBram Moolenaar syn match rubyScopeOperator "::" 1012ed639abSBram Moolenaar syn match rubySuperClassOperator "<" contained 1022ed639abSBram Moolenaar syn match rubyEigenClassOperator "<<" contained 1032ed639abSBram Moolenaar syn match rubyLambdaOperator "->" 1042ed639abSBram Moolenaar syn match rubySplatOperator "\%([[{(|,=]\_s*\)\@<=\*" 1052ed639abSBram Moolenaar syn match rubySplatOperator "\%(^\|\s\)\@1<=\*\%(\h\|[^\x00-\x7F]\|[:$@[]\)\@=" 1062ed639abSBram Moolenaar syn match rubyDoubleSplatOperator "\%([{(|,]\_s*\)\@<=\*\*" 1072ed639abSBram Moolenaar syn match rubyDoubleSplatOperator "\s\@1<=\*\*\%(\h\|[^\x00-\x7F]\|[:$@{]\)\@=" 1082ed639abSBram Moolenaar syn match rubyProcOperator "\%([[(|,]\_s*\)\@<=&" 1092ed639abSBram Moolenaar syn match rubyProcOperator "\s\@1<=&\%(\h\|[^\x00-\x7F]\|[:$@]\|->\)\@=" 1102ed639abSBram Moolenaar 1112ed639abSBram Moolenaar syn cluster rubyProperOperator contains=rubyTernaryOperator,rubyArithmeticOperator,rubyComparisonOperator,rubyBitwiseOperator,rubyBooleanOperator,rubyRangeOperator,rubyAssignmentOperator,rubyEqualityOperator,rubyDefinedOperator,rubyEnglishBooleanOperator 1122ed639abSBram Moolenaar syn cluster rubyClassOperator contains=rubyEigenClassOperator,rubySuperClassOperator 1132ed639abSBram Moolenaar syn cluster rubyPseudoOperator contains=rubyDotOperator,rubyScopeOperator,rubyEigenClassOperator,rubySuperClassOperator,rubyLambdaOperator,rubySplatOperator,rubyDoubleSplatOperator,rubyProcOperator 1142ed639abSBram Moolenaar syn cluster rubyOperator contains=ruby.*Operator 1159964e468SBram Moolenaarendif 1169964e468SBram Moolenaar 1172ed639abSBram Moolenaar" String Interpolation and Backslash Notation {{{1 118c236c16dSBram Moolenaarsyn region rubyInterpolation matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop 1192ed639abSBram Moolenaarsyn match rubyInterpolation "#\$\%(-\w\|[!$&"'*+,./0:;<>?@\`~_]\|\w\+\)" display contained contains=rubyInterpolationDelimiter,@rubyGlobalVariable 1202ed639abSBram Moolenaarsyn match rubyInterpolation "#@@\=\w\+" display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable 1212ed639abSBram Moolenaarsyn match rubyInterpolationDelimiter "#\ze[$@]" display contained 1226b730e11SBram Moolenaar 1232ed639abSBram Moolenaarsyn match rubyStringEscape "\\\_." contained display 1242ed639abSBram Moolenaarsyn match rubyStringEscape "\\\o\{1,3}\|\\x\x\{1,2}" contained display 1252ed639abSBram Moolenaarsyn match rubyStringEscape "\\u\%(\x\{4}\|{\x\{1,6}\%(\s\+\x\{1,6}\)*}\)" contained display 1262ed639abSBram Moolenaarsyn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=.\)" contained display 1272ed639abSBram Moolenaar 1282ed639abSBram Moolenaarsyn match rubyBackslashEscape "\\\\" contained display 1292ed639abSBram Moolenaarsyn match rubyQuoteEscape "\\'" contained display 1302ed639abSBram Moolenaarsyn match rubySpaceEscape "\\ " contained display 1312ed639abSBram Moolenaar 1322ed639abSBram Moolenaarsyn match rubyParenthesisEscape "\\[()]" contained display 1332ed639abSBram Moolenaarsyn match rubyCurlyBraceEscape "\\[{}]" contained display 1342ed639abSBram Moolenaarsyn match rubyAngleBracketEscape "\\[<>]" contained display 1352ed639abSBram Moolenaarsyn match rubySquareBracketEscape "\\[[\]]" contained display 1366b730e11SBram Moolenaar 137*4d8f4761SBram Moolenaarsyn region rubyNestedParentheses start="(" skip="\\\\\|\\)" end=")" transparent contained 138*4d8f4761SBram Moolenaarsyn region rubyNestedCurlyBraces start="{" skip="\\\\\|\\}" end="}" transparent contained 139*4d8f4761SBram Moolenaarsyn region rubyNestedAngleBrackets start="<" skip="\\\\\|\\>" end=">" transparent contained 140*4d8f4761SBram Moolenaarsyn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" end="\]" transparent contained 1416b730e11SBram Moolenaar 1422ed639abSBram Moolenaarsyn cluster rubySingleCharEscape contains=rubyBackslashEscape,rubyQuoteEscape,rubySpaceEscape,rubyParenthesisEscape,rubyCurlyBraceEscape,rubyAngleBracketEscape,rubySquareBracketEscape 1432ed639abSBram Moolenaarsyn cluster rubyNestedBrackets contains=rubyNested.\+ 1442ed639abSBram Moolenaarsyn cluster rubyStringSpecial contains=rubyInterpolation,rubyStringEscape 1452ed639abSBram Moolenaarsyn cluster rubyStringNotTop contains=@rubyStringSpecial,@rubyNestedBrackets,@rubySingleCharEscape 1462ed639abSBram Moolenaar 14789bcfda6SBram Moolenaar" Regular Expression Metacharacters {{{1 1482ed639abSBram Moolenaarsyn region rubyRegexpComment matchgroup=rubyRegexpSpecial start="(?#" skip="\\\\\|\\)" end=")" contained 1492ed639abSBram Moolenaarsyn region rubyRegexpParens matchgroup=rubyRegexpSpecial start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\\\\|\\)" end=")" contained transparent contains=@rubyRegexpSpecial 1502ed639abSBram Moolenaarsyn region rubyRegexpBrackets matchgroup=rubyRegexpCharClass start="\[\^\=" skip="\\\\\|\\\]" end="\]" contained transparent contains=rubyRegexpBrackets,rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass,rubyRegexpIntersection oneline 1512ed639abSBram Moolenaarsyn match rubyRegexpCharClass "\\[DdHhRSsWw]" contained display 1522ed639abSBram Moolenaarsyn match rubyRegexpCharClass "\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|xdigit\):\]" contained 1532ed639abSBram Moolenaarsyn match rubyRegexpCharClass "\\[pP]{^\=.\{-}}" contained display 1542ed639abSBram 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 1582ed639abSBram Moolenaarsyn match rubyRegexpDot "\.\|\\X" contained display 1592ed639abSBram Moolenaarsyn match rubyRegexpIntersection "&&" contained display 1602ed639abSBram 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 1682ed639abSBram Moolenaarsyn cluster rubyRegexpSpecial contains=@rubyStringSpecial,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment,rubyRegexpIntersection 169071d4279SBram Moolenaar 1702ed639abSBram Moolenaar" Numbers {{{1 1712ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*r\=i\=\>" display 1722ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)r\=i\=\>" display 1732ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*r\=i\=\>" display 1742ed639abSBram Moolenaarsyn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*r\=i\=\>" display 1752ed639abSBram Moolenaarsyn match rubyFloat "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*r\=i\=\>" display 1762ed639abSBram 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 1792ed639abSBram Moolenaarsyn match rubyClassName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained 1802ed639abSBram Moolenaarsyn match rubyModuleName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained 1812ed639abSBram 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 1912ed639abSBram MoolenaarSynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape,rubyBackslashEscape 1922ed639abSBram MoolenaarSynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial 1932ed639abSBram Moolenaar 1942ed639abSBram Moolenaarsyn match rubyCapitalizedMethod "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@=" 1952ed639abSBram Moolenaar 196*4d8f4761SBram Moolenaarsyn region rubyParentheses start="(" end=")" contains=ALLBUT,@rubyNotTop contained containedin=rubyBlockParameterList 1972ed639abSBram Moolenaarsyn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\_s*\)\@32<=|" end="|" contains=ALLBUT,@rubyNotTop,@rubyProperOperator 1982ed639abSBram Moolenaar 1992ed639abSBram Moolenaarif exists('ruby_global_variable_error') 2002ed639abSBram Moolenaar syn match rubyGlobalVariableError "$[^A-Za-z_]" display 2012ed639abSBram Moolenaar syn match rubyGlobalVariableError "$-[^0FIKWadilpvw]" display 20289bcfda6SBram Moolenaarendif 20389bcfda6SBram Moolenaar 2042ed639abSBram Moolenaarsyn match rubyPredefinedVariable #$[!$&"'*+,./0:;<>?@\`~]# 205ec7944aaSBram Moolenaarsyn match rubyPredefinedVariable "$\d\+" display 2066b730e11SBram Moolenaarsyn match rubyPredefinedVariable "$_\>" display 2072ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$-[0FIWadilpvw]\>" display 2082ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$\%(stderr\|stdin\|stdout\)\>" display 2092ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display 2102ed639abSBram 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 2132ed639abSBram Moolenaar" Deprecated/removed in 1.9 2142ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$=" 2152ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$-K\>" display 2162ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$\%(deferr\|defout\)\>" display 2172ed639abSBram Moolenaarsyn match rubyPredefinedVariable "$KCODE\>" display 2182ed639abSBram Moolenaar" Deprecated/removed in 2.4 2192ed639abSBram Moolenaarsyn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(FALSE\|NIL\|TRUE\)\>\%(\s*(\)\@!" 220c236c16dSBram Moolenaar 2212ed639abSBram Moolenaarsyn cluster rubyGlobalVariable contains=rubyGlobalVariable,rubyPredefinedVariable,rubyGlobalVariableError 2226b730e11SBram Moolenaar 2232ed639abSBram Moolenaar" Normal Regular Expressions {{{1 2242ed639abSBram 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 2252ed639abSBram MoolenaarSynFold '/' syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\s\+\)\@<=/\%(=\|\_s\)\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite 2262ed639abSBram Moolenaar 2272ed639abSBram Moolenaar" Generalized Regular Expressions {{{1 2282ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite 2292ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r{" end="}[iomxneus]*" skip="\\\\\|\\}" contains=@rubyRegexpSpecial 2302ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r<" end=">[iomxneus]*" skip="\\\\\|\\>" contains=@rubyRegexpSpecial,rubyNestedAngleBrackets 2312ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\[" end="\][iomxneus]*" skip="\\\\\|\\\]" contains=@rubyRegexpSpecial 2322ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r(" end=")[iomxneus]*" skip="\\\\\|\\)" contains=@rubyRegexpSpecial 2332ed639abSBram MoolenaarSynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z(\s\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial 2342ed639abSBram Moolenaar 2352ed639abSBram Moolenaar" Characters {{{1 2362ed639abSBram 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:]]\)\)" 2372ed639abSBram Moolenaarsyn match rubyCharacter "\%(\w\|[^\x00-\x7F]\|[]})\"'/]\)\@1<!?\\u\%(\x\{4}\|{\x\{1,6}}\)" 2382ed639abSBram Moolenaar 2392ed639abSBram Moolenaar" Normal Strings {{{1 24089bcfda6SBram Moolenaarlet s:spell_cluster = exists('ruby_spellcheck_strings') ? ',@Spell' : '' 2412ed639abSBram Moolenaarlet s:fold_arg = s:foldable('string') ? ' fold' : '' 2422ed639abSBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial' . s:spell_cluster . s:fold_arg 2432ed639abSBram Moolenaarexe 'syn region rubyString matchgroup=rubyStringDelimiter start="''" end="''" skip="\\\\\|\\''" contains=rubyQuoteEscape,rubyBackslashEscape' . s:spell_cluster . s:fold_arg 2442ed639abSBram Moolenaarunlet s:spell_cluster s:fold_arg 24589bcfda6SBram Moolenaar 24689bcfda6SBram Moolenaar" Shell Command Output {{{1 2472ed639abSBram MoolenaarSynFold 'string' syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial 2482ed639abSBram Moolenaar 2492ed639abSBram Moolenaar" Generalized Single Quoted Strings, Symbols, Array of Strings and Array of Symbols {{{1 2502ed639abSBram Moolenaar 2512ed639abSBram Moolenaar" Non-bracket punctuation delimiters {{{2 2522ed639abSBram Moolenaarlet s:names = { '~': 'Tilde', '`': 'BackQuote', '!': 'Bang', '@': 'At', '#': 'Hash', '$': 'Dollar', '%': 'Percent', '^': 'Caret', 2532ed639abSBram Moolenaar \ '&': 'Ampersand', '*': 'Asterix', '_': 'Underscore', '-': 'Dash', '+': 'Plus', '=': 'Equals', '|': 'Bar', 2542ed639abSBram Moolenaar \ '\': 'Backslash', ':': 'Colon', ';': 'Semicolon', '"': 'DoubleQuote', "'": 'Quote', ',': 'Comma', '.': 'Period', 2552ed639abSBram Moolenaar \ '?': 'QuestionMark', '/': 'ForwardSlash' } 2562ed639abSBram Moolenaar 2572ed639abSBram Moolenaarfor s:delimiter in keys(s:names) 2582ed639abSBram Moolenaar let s:group = 'ruby' . s:names[s:delimiter] . 'Escape' 2592ed639abSBram Moolenaar 2602ed639abSBram Moolenaar if s:delimiter =~ '[\"]' 2612ed639abSBram Moolenaar let s:delimiter = '\' . s:delimiter 26289bcfda6SBram Moolenaar endif 2636b730e11SBram Moolenaar 2642ed639abSBram Moolenaar exe 'syn match ' . s:group . ' "\V\\' . s:delimiter . '" contained display' 2652ed639abSBram Moolenaar exe 'syn cluster rubySingleCharEscape add=' . s:group 2662ed639abSBram 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' 2672ed639abSBram 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' 2682ed639abSBram 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' 2692ed639abSBram 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' 2702ed639abSBram Moolenaar exe 'hi def link ' . s:group . ' rubyStringEscape' 2712ed639abSBram Moolenaarendfor 2726b730e11SBram Moolenaar 2732ed639abSBram Moolenaarunlet s:delimiter s:group s:names 2742ed639abSBram Moolenaar" }}}2 275071d4279SBram Moolenaar 2762ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces 2772ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets 2782ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets 2792ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses 2802ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape 281071d4279SBram Moolenaar 2822ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces 2832ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets 2842ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets 2852ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses 2866b730e11SBram Moolenaar 2872ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces 2882ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets 2892ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets 2902ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses 2912ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentSymbolDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape 2926b730e11SBram Moolenaar 2932ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces 2942ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets 2952ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets 2962ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses 29789bcfda6SBram Moolenaar 2982ed639abSBram Moolenaar" Generalized Double Quoted Strings, Array of Strings, Array of Symbols and Shell Command Output {{{1 2992ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\%(\%(\w\|[^\x00-\x7F]\|]\)\s*\)\@<!%=" end="=" skip="\\\\\|\\=" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite 3002ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite 3012ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite 3022ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces 3032ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets 3042ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets 3052ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses 3062ed639abSBram MoolenaarSynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[Qx]\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial 30789bcfda6SBram Moolenaar 3082ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite 3092ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I{" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces 3102ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets 3112ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets 3122ed639abSBram MoolenaarSynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses 31389bcfda6SBram Moolenaar 3142ed639abSBram Moolenaar" Here Documents {{{1 3152ed639abSBram 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 3172ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 3182ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 3192ed639abSBram Moolenaarsyn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 3202ed639abSBram Moolenaar 3212ed639abSBram 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 3222ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 3232ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart keepend 3242ed639abSBram MoolenaarSynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 3252ed639abSBram Moolenaar 3262ed639abSBram 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 3272ed639abSBram 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 3282ed639abSBram 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 3292ed639abSBram 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 3322ed639abSBram Moolenaarsyn match rubyAliasDeclaration "[^[:space:];#.()]\+" contained contains=rubySymbol,@rubyGlobalVariable nextgroup=rubyAliasDeclaration2 skipwhite 3332ed639abSBram Moolenaarsyn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,@rubyGlobalVariable 3349964e468SBram Moolenaarsyn match rubyMethodDeclaration "[^[:space:];#(]\+" contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable 335*4d8f4761SBram Moolenaarsyn match rubyClassDeclaration "[^[:space:];#<]\+" contained contains=rubyClassName,rubyScopeOperator nextgroup=rubySuperClassOperator skipwhite 3362ed639abSBram Moolenaarsyn match rubyModuleDeclaration "[^[:space:];#<]\+" contained contains=rubyModuleName,rubyScopeOperator 337c1762ccbSBram Moolenaar 3382ed639abSBram Moolenaarsyn match rubyMethodName "\<\%([_[:alpha:]]\|[^\x00-\x7F]\)\%([_[:alnum:]]\|[^\x00-\x7F]\)*[?!=]\=\%([[:alnum:]_.:?!=]\|[^\x00-\x7F]\)\@!" contained containedin=rubyMethodDeclaration 3392ed639abSBram Moolenaarsyn match rubyMethodName "\%(\s\|^\)\@1<=\%([_[:alpha:]]\|[^\x00-\x7F]\)\%([_[:alnum:]]\|[^\x00-\x7F]\)*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2 3402ed639abSBram Moolenaarsyn match rubyMethodName "\%([[:space:].]\|^\)\@1<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration 3412ed639abSBram Moolenaar 3422ed639abSBram Moolenaarsyn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyMethodName 343c236c16dSBram Moolenaar 34489bcfda6SBram Moolenaar" Keywords {{{1 3452ed639abSBram Moolenaar" TODO: reorganise 3462ed639abSBram Moolenaarsyn match rubyControl "\%#=1\<\%(break\|in\|next\|redo\|retry\|return\)\>" 3472ed639abSBram Moolenaarsyn match rubyKeyword "\%#=1\<\%(super\|yield\)\>" 3482ed639abSBram Moolenaarsyn match rubyBoolean "\%#=1\<\%(true\|false\)\>[?!]\@!" 3492ed639abSBram Moolenaarsyn match rubyPseudoVariable "\%#=1\<\(self\|nil\)\>[?!]\@!" 3502ed639abSBram Moolenaarsyn match rubyPseudoVariable "\%#=1\<__\%(ENCODING\|dir\|FILE\|LINE\|callee\|method\)__\>" 3512ed639abSBram 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 3602ed639abSBram Moolenaar syn match rubyClass "\<class\>" nextgroup=rubyClassDeclaration,rubyEigenClassOperator skipwhite skipnl 3619964e468SBram Moolenaar syn match rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl 3621d68952aSBram Moolenaar 3632ed639abSBram Moolenaar SynFold 'def' syn region rubyMethodBlock start="\<def\>" matchgroup=rubyDefine skip="\<end:\|\%(\<def\_s\+\)\@<=end\>" end="\<end\>" contains=ALLBUT,@rubyNotTop 3642ed639abSBram Moolenaar SynFold 'class' syn region rubyClassBlock start="\<class\>" matchgroup=rubyClass skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 3652ed639abSBram Moolenaar SynFold 'module' syn region rubyModuleBlock start="\<module\>" matchgroup=rubyModule skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 366071d4279SBram Moolenaar 3676b730e11SBram Moolenaar " modifiers 3682ed639abSBram Moolenaar syn match rubyLineContinuation "\\$" nextgroup=@rubyModifier skipwhite skipnl 36989bcfda6SBram Moolenaar syn match rubyConditionalModifier "\<\%(if\|unless\)\>" 37089bcfda6SBram Moolenaar syn match rubyRepeatModifier "\<\%(while\|until\)\>" 3712ed639abSBram Moolenaar syn match rubyRescueModifier "\<rescue\>" 372071d4279SBram Moolenaar 3732ed639abSBram Moolenaar syn cluster rubyModifier contains=rubyConditionalModifier,rubyRepeatModifier,rubyRescueModifier 3742ed639abSBram Moolenaar 3752ed639abSBram 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 3782ed639abSBram Moolenaar SynFold '{' syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop 3792ed639abSBram Moolenaar SynFold '[' syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<!\[" end="]" contains=ALLBUT,@rubyNotTop 380071d4279SBram Moolenaar 381c1762ccbSBram Moolenaar " statements without 'do' 3822ed639abSBram Moolenaar SynFold 'begin' syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 3832ed639abSBram Moolenaar SynFold 'case' syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 38489bcfda6SBram Moolenaar 3852ed639abSBram 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 3872ed639abSBram Moolenaar syn match rubyConditional "\<\%(then\|else\|when\)\>" contained containedin=rubyCaseExpression 3882ed639abSBram Moolenaar syn match rubyConditional "\<\%(then\|else\|elsif\)\>" contained containedin=rubyConditionalExpression 389071d4279SBram Moolenaar 3902ed639abSBram Moolenaar syn match rubyExceptionHandler "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyBlockExpression,rubyDoBlock 3912ed639abSBram Moolenaar syn match rubyExceptionHandler2 "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyModuleBlock,rubyClassBlock,rubyMethodBlock 3922ed639abSBram Moolenaar syn cluster rubyExceptionHandler contains=rubyExceptionHandler,rubyExceptionHandler2 3931d68952aSBram Moolenaar 394c1762ccbSBram Moolenaar " statements with optional 'do' 3952ed639abSBram 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 3972ed639abSBram 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 4022ed639abSBram Moolenaar exe "syn sync minlines=" . ruby_minlines 403071d4279SBram Moolenaar 4046b730e11SBram Moolenaarelse 4052ed639abSBram Moolenaar syn match rubyControl "\<def\>" nextgroup=rubyMethodDeclaration skipwhite skipnl 4062ed639abSBram Moolenaar syn match rubyControl "\<class\>" nextgroup=rubyClassDeclaration skipwhite skipnl 4072ed639abSBram Moolenaar syn match rubyControl "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl 4082ed639abSBram Moolenaar syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|rescue\|ensure\|then\|when\|end\)\>" 4092ed639abSBram Moolenaar syn match rubyKeyword "\<\%(alias\|undef\)\>" 4106b730e11SBram Moolenaarendif 411071d4279SBram Moolenaar 41289bcfda6SBram Moolenaar" Special Methods {{{1 4136b730e11SBram Moolenaarif !exists("ruby_no_special_methods") 4142ed639abSBram Moolenaar syn match rubyAccess "\<\%(public\|protected\|private\)\>" " use re=2 4152ed639abSBram Moolenaar syn match rubyAccess "\%#=1\<\%(public\|private\)_class_method\>" 4162ed639abSBram Moolenaar syn match rubyAccess "\%#=1\<\%(public\|private\)_constant\>" 4172ed639abSBram Moolenaar syn match rubyAccess "\%#=1\<module_function\>" 4182ed639abSBram Moolenaar syn match rubyAttribute "\%#=1\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!" " attr is a common variable name 4192ed639abSBram Moolenaar syn match rubyAttribute "\%#=1\<attr_\%(accessor\|reader\|writer\)\>" 4202ed639abSBram Moolenaar syn match rubyControl "\%#=1\<\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>" 4212ed639abSBram Moolenaar syn match rubyEval "\%#=1\<eval\>" 4222ed639abSBram Moolenaar syn match rubyEval "\%#=1\<\%(class\|instance\|module\)_eval\>" 4232ed639abSBram Moolenaar syn match rubyException "\%#=1\<\%(raise\|fail\|catch\|throw\)\>" 4242ed639abSBram Moolenaar syn match rubyInclude "\%#=1\<\%(autoload\|gem\|load\|require\%(_relative\)\=\)\>" 4252ed639abSBram Moolenaar syn match rubyKeyword "\%#=1\<\%(callcc\|caller\|lambda\|proc\)\>" 4262ed639abSBram Moolenaar syn match rubyMacro "\%#=1\<\%(extend\|include\|prepend\|refine\|using\)\>" 4272ed639abSBram 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 4332ed639abSBram Moolenaarsyn match rubyEncoding "[[:alnum:]-]\+" contained display 4342ed639abSBram Moolenaarsyn match rubyMagicComment "\c\%<3l#\s*\zs\%(coding\|encoding\):" contained nextgroup=rubyEncoding skipwhite 4352ed639abSBram Moolenaarsyn match rubyMagicComment "\c\%<10l#\s*\zs\%(frozen_string_literal\|warn_indent\|warn_past_scope\):" contained nextgroup=rubyBoolean skipwhite 4362ed639abSBram Moolenaarsyn match rubyComment "#.*" contains=@rubyCommentSpecial,rubySpaceError,@Spell 4372ed639abSBram Moolenaar 4382ed639abSBram Moolenaarsyn cluster rubyCommentSpecial contains=rubySharpBang,rubyTodo,rubyMagicComment 4392ed639abSBram Moolenaarsyn cluster rubyCommentNotTop contains=@rubyCommentSpecial,rubyEncoding 4402ed639abSBram 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 4482ed639abSBram Moolenaar" {{{1 Useless Line Continuations 4492ed639abSBram Moolenaarsyn match rubyUselessLineContinuation "\%([.:,;{([<>~\*%&^|+=-]\|%(\%(\w\|[^\x00-\x7F]\)\@1<![?!]\)\s*\zs\\$" nextgroup=rubyUselessLineContinuation skipwhite skipempty 4502ed639abSBram Moolenaarsyn match rubyUselessLineContinuation "\\$" nextgroup=rubyUselessLineContinuation skipwhite skipempty contained 4516b730e11SBram Moolenaar 4522ed639abSBram Moolenaar" Keyword Nobbling {{{1 4532ed639abSBram Moolenaar" prevent methods with keyword names being highlighted as keywords when called 4542ed639abSBram Moolenaarsyn match rubyKeywordAsMethod "\%(\%(\.\@1<!\.\)\|&\.\|::\)\_s*\%([_[:lower:]][_[:alnum:]]*\|\%(BEGIN\|END\)\>\)" transparent contains=rubyDotOperator,rubyScopeOperator 4552ed639abSBram Moolenaar 4562ed639abSBram Moolenaar" Bang and Predicate Methods and Operators {{{1 4572ed639abSBram Moolenaarsyn match rubyBangPredicateMethod "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]" 4582ed639abSBram Moolenaar 4592ed639abSBram Moolenaarif !exists("ruby_no_special_methods") 4602ed639abSBram Moolenaar syn match rubyControl "\%#=1\<exit!" display 4612ed639abSBram Moolenaarendif 4622ed639abSBram Moolenaarsyn match rubyDefinedOperator "\%#=1\<defined?" display 4632ed639abSBram Moolenaar 4642ed639abSBram Moolenaar" 1.9-style Hash Keys and Keyword Parameters {{{1 465*4d8f4761SBram Moolenaarsyn match rubySymbol "\%(\w\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]\=::\@!"he=e-1 contained containedin=rubyBlockParameterList,rubyCurlyBlock 4662ed639abSBram Moolenaarsyn match rubySymbol "[]})\"':]\@1<!\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],;]\@="he=e-1 4672ed639abSBram Moolenaarsyn match rubySymbol "[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],;]\@="hs=s+1,he=e-1 468c236c16dSBram Moolenaar 46989bcfda6SBram Moolenaar" __END__ Directive {{{1 4702ed639abSBram 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 4752ed639abSBram 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 4842ed639abSBram Moolenaarhi def link rubyExceptionHandler rubyConditional 4852ed639abSBram 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 4922ed639abSBram 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 5122ed639abSBram Moolenaar 513c1762ccbSBram Moolenaarhi def link rubyOperator Operator 5142ed639abSBram Moolenaarhi def link rubyDefinedOperator rubyOperator 5152ed639abSBram Moolenaarhi def link rubyEnglishBooleanOperator rubyOperator 5162ed639abSBram Moolenaarif exists("ruby_operators") 5172ed639abSBram Moolenaar hi def link rubyTernaryOperator rubyOperator 5182ed639abSBram Moolenaar hi def link rubyArithmeticOperator rubyOperator 5192ed639abSBram Moolenaar hi def link rubyComparisonOperator rubyOperator 5202ed639abSBram Moolenaar hi def link rubyBitwiseOperator rubyOperator 5212ed639abSBram Moolenaar hi def link rubyBooleanOperator rubyOperator 5222ed639abSBram Moolenaar hi def link rubyRangeOperator rubyOperator 5232ed639abSBram Moolenaar hi def link rubyAssignmentOperator rubyOperator 5242ed639abSBram Moolenaar hi def link rubyEqualityOperator rubyOperator 5252ed639abSBram Moolenaarendif 5262ed639abSBram Moolenaar 5272ed639abSBram Moolenaarif exists("ruby_pseudo_operators") 5282ed639abSBram Moolenaar hi def link rubyPseudoOperator Special 5292ed639abSBram Moolenaar hi def link rubyDotOperator rubyPseudoOperator 5302ed639abSBram Moolenaar hi def link rubyScopeOperator rubyPseudoOperator 5312ed639abSBram Moolenaar hi def link rubySuperClassOperator rubyPseudoOperator 5322ed639abSBram Moolenaar hi def link rubyEigenClassOperator rubyPseudoOperator 5332ed639abSBram Moolenaar hi def link rubyLambdaOperator rubyPseudoOperator 5342ed639abSBram Moolenaar hi def link rubyDoubleSplatOperator rubyPseudoOperator 5352ed639abSBram Moolenaar hi def link rubySplatOperator rubyPseudoOperator 5362ed639abSBram Moolenaar hi def link rubyProcOperator rubyPseudoOperator 5372ed639abSBram Moolenaarendif 5382ed639abSBram Moolenaar 539c1762ccbSBram Moolenaarhi def link rubyBeginEnd Statement 540c1762ccbSBram Moolenaarhi def link rubyEval Statement 541c1762ccbSBram Moolenaarhi def link rubyPseudoVariable Constant 5422ed639abSBram Moolenaarhi def link rubyCapitalizedMethod NONE 543071d4279SBram Moolenaar 544c1762ccbSBram Moolenaarhi def link rubyComment Comment 5452ed639abSBram Moolenaarhi def link rubyEncoding Constant 5462ed639abSBram 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 5522ed639abSBram Moolenaarhi def link rubyBackslashEscape rubyStringEscape 5531d68952aSBram Moolenaarhi def link rubyQuoteEscape rubyStringEscape 5542ed639abSBram Moolenaarhi def link rubySpaceEscape rubyStringEscape 5552ed639abSBram Moolenaarhi def link rubyParenthesisEscape rubyStringEscape 5562ed639abSBram Moolenaarhi def link rubyCurlyBraceEscape rubyStringEscape 5572ed639abSBram Moolenaarhi def link rubyAngleBracketEscape rubyStringEscape 5582ed639abSBram Moolenaarhi def link rubySquareBracketEscape rubyStringEscape 559c236c16dSBram Moolenaarhi def link rubyStringEscape Special 5602ed639abSBram Moolenaar 561c1762ccbSBram Moolenaarhi def link rubyInterpolationDelimiter Delimiter 562c1762ccbSBram Moolenaarhi def link rubySharpBang PreProc 5632ed639abSBram Moolenaarhi def link rubyStringDelimiter Delimiter 5642ed639abSBram Moolenaarhi def link rubyHeredocDelimiter rubyStringDelimiter 5652ed639abSBram Moolenaarhi def link rubyPercentRegexpDelimiter rubyRegexpDelimiter 5662ed639abSBram Moolenaarhi def link rubyPercentStringDelimiter rubyStringDelimiter 5672ed639abSBram 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 5762ed639abSBram 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 5822ed639abSBram Moolenaarif exists("ruby_line_continuation_error") 5832ed639abSBram Moolenaar hi def link rubyUselessLineContinuation rubyError 5842ed639abSBram Moolenaarendif 5852ed639abSBram 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 5942ed639abSBram Moolenaardelc SynFold 5952ed639abSBram Moolenaar 59689bcfda6SBram Moolenaar" vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: 597