ruby.vim (41845B)
1 " Vim syntax file 2 " Language: Ruby 3 " Maintainer: Doug Kearns <dougkearns@gmail.com> 4 " URL: https://github.com/vim-ruby/vim-ruby 5 " Last Change: 2023 Mar 16 6 " ---------------------------------------------------------------------------- 7 " 8 " Previous Maintainer: Mirko Nasato 9 " Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN) 10 " ---------------------------------------------------------------------------- 11 12 " Prelude {{{1 13 if exists("b:current_syntax") 14 finish 15 endif 16 17 " this file uses line continuations 18 let s:cpo_sav = &cpo 19 set cpo&vim 20 21 " eRuby Config {{{1 22 if exists('main_syntax') && main_syntax == 'eruby' 23 let b:ruby_no_expensive = 1 24 endif 25 26 " Folding Config {{{1 27 if has("folding") && exists("ruby_fold") 28 setlocal foldmethod=syntax 29 endif 30 31 let s:foldable_groups = split( 32 \ get( 33 \ b:, 34 \ 'ruby_foldable_groups', 35 \ get(g:, 'ruby_foldable_groups', 'ALL') 36 \ ) 37 \ ) 38 39 function! s:foldable(...) abort 40 if index(s:foldable_groups, 'NONE') > -1 41 return 0 42 endif 43 44 if index(s:foldable_groups, 'ALL') > -1 45 return 1 46 endif 47 48 for l:i in a:000 49 if index(s:foldable_groups, l:i) > -1 50 return 1 51 endif 52 endfor 53 54 return 0 55 endfunction 56 57 function! s:run_syntax_fold(args) abort 58 let [_0, _1, groups, cmd; _] = matchlist(a:args, '\(["'']\)\(.\{-}\)\1\s\+\(.*\)') 59 if call('s:foldable', split(groups)) 60 let cmd .= ' fold' 61 endif 62 exe cmd 63 endfunction 64 65 com! -nargs=* SynFold call s:run_syntax_fold(<q-args>) 66 67 " Not-Top Cluster {{{1 68 syn cluster rubyNotTop contains=@rubyCommentNotTop,@rubyStringNotTop,@rubyRegexpSpecial,@rubyDeclaration,@rubyExceptionHandler,@rubyClassOperator,rubyConditional,rubyModuleName,rubyClassName,rubySymbolDelimiter,rubyDoubleQuoteSymbolDelimiter,rubySingleQuoteSymbolDelimiter,rubyParentheses,@Spell 69 70 " Whitespace Errors {{{1 71 if exists("ruby_space_errors") 72 if !exists("ruby_no_trail_space_error") 73 syn match rubySpaceError display excludenl "\s\+$" 74 endif 75 if !exists("ruby_no_tab_space_error") 76 syn match rubySpaceError display " \+\t"me=e-1 77 endif 78 endif 79 80 " Operators {{{1 81 82 syn match rubyEnglishBooleanOperator "\<\%(and\|or\|not\)\>" 83 84 if exists("ruby_operators") || exists("ruby_pseudo_operators") 85 syn match rubyDotOperator "\.\|&\." 86 87 syn match rubyTernaryOperator "\%(\w\|[^\x00-\x7F]\)\@1<!?\|:" 88 syn match rubyArithmeticOperator "\*\*\|[*/%+]\|->\@!" 89 syn match rubyComparisonOperator "<=>\|<=\|<\|>=\|[-=]\@1<!>" 90 syn match rubyBitwiseOperator "[~^|]\|&\.\@!\|<<\|>>" 91 syn match rubyBooleanOperator "\%(\w\|[^\x00-\x7F]\)\@1<!!\|&&\|||" 92 syn match rubyRangeOperator "\.\.\.\=" 93 syn match rubyAssignmentOperator "=>\@!\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|||=\||=\|%=\|+=\|>>=\|<<=\|\^=" 94 syn match rubyAssignmentOperator "=>\@!" contained containedin=rubyBlockParameterList " TODO: this is inelegant 95 syn match rubyEqualityOperator "===\|==\|!=\|!\~\|=\~" 96 97 syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<=\[" end="]" contains=ALLBUT,@rubyNotTop 98 99 syn match rubyScopeOperator "::" 100 syn match rubySuperClassOperator "<" contained 101 syn match rubyEigenClassOperator "<<" contained 102 syn match rubyLambdaOperator "->" 103 syn match rubySplatOperator "\%([[{(|,=]\_s*\)\@<=\*" 104 syn match rubySplatOperator "\%(^\|\s\)\@1<=\*\%(\h\|[^\x00-\x7F]\|[:$@[]\)\@=" 105 syn match rubyDoubleSplatOperator "\%([{(|,]\_s*\)\@<=\*\*" 106 syn match rubyDoubleSplatOperator "\s\@1<=\*\*\%(\h\|[^\x00-\x7F]\|[:$@{]\)\@=" 107 syn match rubyProcOperator "\%([[(|,]\_s*\)\@<=&" 108 syn match rubyProcOperator "\s\@1<=&\%(\h\|[^\x00-\x7F]\|[:$@]\|->\)\@=" 109 110 syn cluster rubyProperOperator contains=rubyTernaryOperator,rubyArithmeticOperator,rubyComparisonOperator,rubyBitwiseOperator,rubyBooleanOperator,rubyRangeOperator,rubyAssignmentOperator,rubyEqualityOperator,rubyDefinedOperator,rubyEnglishBooleanOperator 111 syn cluster rubyClassOperator contains=rubyEigenClassOperator,rubySuperClassOperator 112 syn cluster rubyPseudoOperator contains=rubyDotOperator,rubyScopeOperator,rubyEigenClassOperator,rubySuperClassOperator,rubyLambdaOperator,rubySplatOperator,rubyDoubleSplatOperator,rubyProcOperator 113 syn cluster rubyOperator contains=ruby.*Operator 114 endif 115 116 " String Interpolation and Backslash Notation {{{1 117 syn region rubyInterpolation matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop 118 syn match rubyInterpolation "#\$\%(-\w\|[!$&"'*+,./0:;<>?@\`~_]\|\w\+\)" display contained contains=rubyInterpolationDelimiter,@rubyGlobalVariable 119 syn match rubyInterpolation "#@@\=\w\+" display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable 120 syn match rubyInterpolationDelimiter "#\ze[$@]" display contained 121 122 syn match rubyStringEscape "\\\_." contained display 123 syn match rubyStringEscape "\\\o\{1,3}\|\\x\x\{1,2}" contained display 124 syn match rubyStringEscape "\\u\%(\x\{4}\|{\x\{1,6}\%(\s\+\x\{1,6}\)*}\)" contained display 125 syn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=.\)" contained display 126 127 syn match rubyBackslashEscape "\\\\" contained display 128 syn match rubyQuoteEscape "\\'" contained display 129 syn match rubySpaceEscape "\\ " contained display 130 131 syn match rubyParenthesisEscape "\\[()]" contained display 132 syn match rubyCurlyBraceEscape "\\[{}]" contained display 133 syn match rubyAngleBracketEscape "\\[<>]" contained display 134 syn match rubySquareBracketEscape "\\[[\]]" contained display 135 136 syn region rubyNestedParentheses start="(" skip="\\\\\|\\)" end=")" transparent contained 137 syn region rubyNestedCurlyBraces start="{" skip="\\\\\|\\}" end="}" transparent contained 138 syn region rubyNestedAngleBrackets start="<" skip="\\\\\|\\>" end=">" transparent contained 139 syn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" end="\]" transparent contained 140 141 syn cluster rubySingleCharEscape contains=rubyBackslashEscape,rubyQuoteEscape,rubySpaceEscape,rubyParenthesisEscape,rubyCurlyBraceEscape,rubyAngleBracketEscape,rubySquareBracketEscape 142 syn cluster rubyNestedBrackets contains=rubyNested.\+ 143 syn cluster rubyStringSpecial contains=rubyInterpolation,rubyStringEscape 144 syn cluster rubyStringNotTop contains=@rubyStringSpecial,@rubyNestedBrackets,@rubySingleCharEscape 145 146 " Regular Expression Metacharacters {{{1 147 syn region rubyRegexpComment matchgroup=rubyRegexpSpecial start="(?#" skip="\\\\\|\\)" end=")" contained 148 syn region rubyRegexpParens matchgroup=rubyRegexpSpecial start="(\%(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\\\\|\\)" end=")" contained transparent contains=@rubyRegexpSpecial 149 syn region rubyRegexpBrackets matchgroup=rubyRegexpCharClass start="\[\^\=" skip="\\\\\|\\\]" end="\]" contained transparent contains=rubyRegexpBrackets,rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass,rubyRegexpIntersection oneline 150 syn match rubyRegexpCharClass "\\[DdHhRSsWw]" contained display 151 syn match rubyRegexpCharClass "\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|xdigit\):\]" contained 152 syn match rubyRegexpCharClass "\\[pP]{^\=.\{-}}" contained display 153 syn match rubyRegexpEscape "\\[].*?+^$|\\/(){}[]" contained " see commit e477f10 154 syn match rubyRegexpQuantifier "[*?+][?+]\=" contained display 155 syn match rubyRegexpQuantifier "{\d\+\%(,\d*\)\=}?\=" contained display 156 syn match rubyRegexpAnchor "[$^]\|\\[ABbGZz]" contained display 157 syn match rubyRegexpDot "\.\|\\X" contained display 158 syn match rubyRegexpIntersection "&&" contained display 159 syn match rubyRegexpSpecial "\\K" contained display 160 syn match rubyRegexpSpecial "|" contained display 161 syn match rubyRegexpSpecial "\\[1-9]\d\=\d\@!" contained display 162 syn match rubyRegexpSpecial "\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display 163 syn match rubyRegexpSpecial "\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display 164 syn match rubyRegexpSpecial "\\g<\%([a-z_]\w*\|-\=\d\+\)>" contained display 165 syn match rubyRegexpSpecial "\\g'\%([a-z_]\w*\|-\=\d\+\)'" contained display 166 167 syn cluster rubyRegexpSpecial contains=@rubyStringSpecial,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment,rubyRegexpIntersection 168 169 " Numbers {{{1 170 syn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*r\=i\=\>" display 171 syn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)r\=i\=\>" display 172 syn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*r\=i\=\>" display 173 syn match rubyInteger "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*r\=i\=\>" display 174 syn match rubyFloat "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*r\=i\=\>" display 175 syn match rubyFloat "\%(\%(\w\|[^\x00-\x7F]\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)i\=\>" display 176 177 " Identifiers {{{1 178 syn match rubyClassName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained 179 syn match rubyModuleName "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" contained 180 syn match rubyConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<[[:upper:]]\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@!" 181 syn match rubyClassVariable "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display 182 syn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display 183 syn match rubyGlobalVariable "$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)" 184 syn match rubySymbolDelimiter ":" contained 185 syn match rubySymbol "[]})\"':]\@1<!:\%(\^\|\~@\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!@\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)" contains=rubySymbolDelimiter 186 syn match rubySymbol "[]})\"':]\@1<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)" contains=rubySymbolDelimiter 187 syn match rubySymbol "[]})\"':]\@1<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contains=rubySymbolDelimiter 188 syn match rubySymbol "[]})\"':]\@1<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\=" contains=rubySymbolDelimiter 189 190 SynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape,rubyBackslashEscape 191 SynFold ':' syn region rubySymbol matchgroup=rubySymbolDelimiter start="[]})\"':]\@1<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial 192 193 syn match rubyCapitalizedMethod "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\u\%(\w\|[^\x00-\x7F]\)*\>\%(\s*(\)\@=" 194 195 syn region rubyParentheses start="(" end=")" contains=ALLBUT,@rubyNotTop contained containedin=rubyBlockParameterList 196 syn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\_s*\)\@32<=|" end="|" contains=ALLBUT,@rubyNotTop,@rubyProperOperator 197 198 if exists('ruby_global_variable_error') 199 syn match rubyGlobalVariableError "$[^A-Za-z_]" display 200 syn match rubyGlobalVariableError "$-[^0FIKWadilpvw]" display 201 endif 202 203 syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<>?@\`~]# 204 syn match rubyPredefinedVariable "$\d\+" display 205 syn match rubyPredefinedVariable "$_\>" display 206 syn match rubyPredefinedVariable "$-[0FIWadilpvw]\>" display 207 syn match rubyPredefinedVariable "$\%(stderr\|stdin\|stdout\)\>" display 208 syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display 209 syn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(ARGF\|ARGV\|ENV\|DATA\|STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\)\>\%(\s*(\)\@!" 210 syn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!" 211 212 " Deprecated/removed in 1.9 213 syn match rubyPredefinedVariable "$=" 214 syn match rubyPredefinedVariable "$-K\>" display 215 syn match rubyPredefinedVariable "$\%(deferr\|defout\)\>" display 216 syn match rubyPredefinedVariable "$KCODE\>" display 217 " Deprecated/removed in 2.4 218 syn match rubyPredefinedConstant "\%(\%(^\|[^.]\)\.\s*\)\@<!\<\%(FALSE\|NIL\|TRUE\)\>\%(\s*(\)\@!" 219 220 syn cluster rubyGlobalVariable contains=rubyGlobalVariable,rubyPredefinedVariable,rubyGlobalVariableError 221 222 " Normal Regular Expressions {{{1 223 SynFold '/' 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 224 SynFold '/' syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\s\+\)\@<=/\%(=\|\_s\)\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite 225 226 " Generalized Regular Expressions {{{1 227 SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial nextgroup=@rubyModifier skipwhite 228 SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r{" end="}[iomxneus]*" skip="\\\\\|\\}" contains=@rubyRegexpSpecial 229 SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r<" end=">[iomxneus]*" skip="\\\\\|\\>" contains=@rubyRegexpSpecial,rubyNestedAngleBrackets 230 SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\[" end="\][iomxneus]*" skip="\\\\\|\\\]" contains=@rubyRegexpSpecial 231 SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r(" end=")[iomxneus]*" skip="\\\\\|\\)" contains=@rubyRegexpSpecial 232 SynFold '%' syn region rubyRegexp matchgroup=rubyPercentRegexpDelimiter start="%r\z(\s\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial 233 234 " Characters {{{1 235 syn 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:]]\)\)" 236 syn match rubyCharacter "\%(\w\|[^\x00-\x7F]\|[]})\"'/]\)\@1<!?\\u\%(\x\{4}\|{\x\{1,6}}\)" 237 238 " Normal Strings {{{1 239 let s:spell_cluster = exists('ruby_spellcheck_strings') ? ',@Spell' : '' 240 let s:fold_arg = s:foldable('string') ? ' fold' : '' 241 exe 'syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial' . s:spell_cluster . s:fold_arg 242 exe 'syn region rubyString matchgroup=rubyStringDelimiter start="''" end="''" skip="\\\\\|\\''" contains=rubyQuoteEscape,rubyBackslashEscape' . s:spell_cluster . s:fold_arg 243 unlet s:spell_cluster s:fold_arg 244 245 " Shell Command Output {{{1 246 SynFold 'string' syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial 247 248 " Generalized Single Quoted Strings, Symbols, Array of Strings and Array of Symbols {{{1 249 250 " Non-bracket punctuation delimiters {{{2 251 let s:names = { '~': 'Tilde', '`': 'BackQuote', '!': 'Bang', '@': 'At', '#': 'Hash', '$': 'Dollar', '%': 'Percent', '^': 'Caret', 252 \ '&': 'Ampersand', '*': 'Asterix', '_': 'Underscore', '-': 'Dash', '+': 'Plus', '=': 'Equals', '|': 'Bar', 253 \ '\': 'Backslash', ':': 'Colon', ';': 'Semicolon', '"': 'DoubleQuote', "'": 'Quote', ',': 'Comma', '.': 'Period', 254 \ '?': 'QuestionMark', '/': 'ForwardSlash' } 255 256 for s:delimiter in keys(s:names) 257 let s:group = 'ruby' . s:names[s:delimiter] . 'Escape' 258 259 if s:delimiter =~ '[\"]' 260 let s:delimiter = '\' . s:delimiter 261 endif 262 263 exe 'syn match ' . s:group . ' "\V\\' . s:delimiter . '" contained display' 264 exe 'syn cluster rubySingleCharEscape add=' . s:group 265 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' 266 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' 267 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' 268 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' 269 exe 'hi def link ' . s:group . ' rubyStringEscape' 270 endfor 271 272 unlet s:delimiter s:group s:names 273 " }}}2 274 275 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces 276 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets 277 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets 278 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses 279 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%q\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape 280 281 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces 282 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets 283 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets 284 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%w(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses 285 286 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces 287 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets 288 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySquareBracketEscape,rubyNestedSquareBrackets 289 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%s(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubyParenthesisEscape,rubyNestedParentheses 290 SynFold '%' syn region rubyString matchgroup=rubyPercentSymbolDelimiter start="%s\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=rubyBackslashEscape,rubySpaceEscape 291 292 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i{" end="}" skip="\\\\\|\\}" contains=rubyBackslashEscape,rubySpaceEscape,rubyCurlyBraceEscape,rubyNestedCurlyBraces 293 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i<" end=">" skip="\\\\\|\\>" contains=rubyBackslashEscape,rubySpaceEscape,rubyAngleBracketEscape,rubyNestedAngleBrackets 294 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i\[" end="\]" skip="\\\\\|\\\]" contains=rubyBackslashEscape,rubySpaceEscape,rubySquareBracketEscape,rubyNestedSquareBrackets 295 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%i(" end=")" skip="\\\\\|\\)" contains=rubyBackslashEscape,rubySpaceEscape,rubyParenthesisEscape,rubyNestedParentheses 296 297 " Generalized Double Quoted Strings, Array of Strings, Array of Symbols and Shell Command Output {{{1 298 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="\%(\%(\w\|[^\x00-\x7F]\|]\)\s*\)\@<!%=" end="=" skip="\\\\\|\\=" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite 299 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite 300 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite 301 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces 302 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets 303 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets 304 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses 305 SynFold '%' syn region rubyString matchgroup=rubyPercentStringDelimiter start="%[Qx]\z(\s\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial 306 307 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial nextgroup=@rubyModifier skipwhite 308 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I{" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces 309 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets 310 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets 311 SynFold '%' syn region rubySymbol matchgroup=rubyPercentSymbolDelimiter start="%I(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses 312 313 " Here Documents {{{1 314 syn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 315 316 syn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 317 syn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 318 syn region rubyHeredocStart matchgroup=rubyHeredocDelimiter start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<[-~]\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop 319 320 SynFold '<<' 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 321 SynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 322 SynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart keepend 323 SynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})"'`]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyHeredocDelimiter end=+^\z1$+ contains=rubyHeredocStart,@rubyStringSpecial keepend 324 325 SynFold '<<' 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 326 SynFold '<<' 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 327 SynFold '<<' syn region rubyString start=+\%(\%(class\|::\|\.\@1<!\.\)\_s*\|\%([]})]\)\s\|\w\)\@<!<<[-~]'\z([^']*\)'\ze\%(.*<<[-~]\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyHeredocDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart keepend 328 SynFold '<<' 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 329 330 " Module, Class, Method and Alias Declarations {{{1 331 syn match rubyAliasDeclaration "[^[:space:];#.()]\+" contained contains=rubySymbol,@rubyGlobalVariable nextgroup=rubyAliasDeclaration2 skipwhite 332 syn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,@rubyGlobalVariable 333 syn match rubyMethodDeclaration "[^[:space:];#(]\+" contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable 334 syn match rubyClassDeclaration "[^[:space:];#<]\+" contained contains=rubyClassName,rubyScopeOperator nextgroup=rubySuperClassOperator skipwhite 335 syn match rubyModuleDeclaration "[^[:space:];#<]\+" contained contains=rubyModuleName,rubyScopeOperator 336 337 syn match rubyMethodName "\<\%([_[:alpha:]]\|[^\x00-\x7F]\)\%([_[:alnum:]]\|[^\x00-\x7F]\)*[?!=]\=\%([[:alnum:]_.:?!=]\|[^\x00-\x7F]\)\@!" contained containedin=rubyMethodDeclaration 338 syn match rubyMethodName "\%(\s\|^\)\@1<=\%([_[:alpha:]]\|[^\x00-\x7F]\)\%([_[:alnum:]]\|[^\x00-\x7F]\)*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2 339 syn match rubyMethodName "\%([[:space:].]\|^\)\@1<=\%(\[\]=\=\|\*\*\|[-+!~]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration 340 341 syn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyMethodName 342 343 " Keywords {{{1 344 " TODO: reorganise 345 syn match rubyControl "\%#=1\<\%(break\|in\|next\|redo\|retry\|return\)\>" 346 syn match rubyKeyword "\%#=1\<\%(super\|yield\)\>" 347 syn match rubyBoolean "\%#=1\<\%(true\|false\)\>[?!]\@!" 348 syn match rubyPseudoVariable "\%#=1\<\%(self\|nil\)\>[?!]\@!" 349 syn match rubyPseudoVariable "\%#=1\<__\%(ENCODING\|dir\|FILE\|LINE\|callee\|method\)__\>" 350 syn match rubyBeginEnd "\%#=1\<\%(BEGIN\|END\)\>" 351 352 " Expensive Mode {{{1 353 " Match 'end' with the appropriate opening keyword for syntax based folding 354 " and special highlighting of module/class/method definitions 355 if !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive") 356 syn match rubyDefine "\<alias\>" nextgroup=rubyAliasDeclaration skipwhite skipnl 357 syn match rubyDefine "\<def\>" nextgroup=rubyMethodDeclaration skipwhite skipnl 358 syn match rubyDefine "\<undef\>" nextgroup=rubyMethodName skipwhite skipnl 359 syn match rubyClass "\<class\>" nextgroup=rubyClassDeclaration,rubyEigenClassOperator skipwhite skipnl 360 syn match rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl 361 362 SynFold 'def' syn region rubyMethodBlock start="\<def\>" matchgroup=rubyDefine skip="\<end:\|\%(\<def\_s\+\)\@<=end\>" end="\<end\>" contains=ALLBUT,@rubyNotTop 363 SynFold 'class' syn region rubyClassBlock start="\<class\>" matchgroup=rubyClass skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 364 SynFold 'module' syn region rubyModuleBlock start="\<module\>" matchgroup=rubyModule skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 365 366 " endless def 367 syn match rubyDefine "\<def\s\+\ze[^[:space:];#(]\+\%(\s\+\|\s*(.*)\s*\)=" nextgroup=rubyMethodDeclaration skipwhite 368 369 " modifiers 370 syn match rubyLineContinuation "\\$" nextgroup=@rubyModifier skipwhite skipnl 371 syn match rubyConditionalModifier "\<\%(if\|unless\)\>" 372 syn match rubyRepeatModifier "\<\%(while\|until\)\>" 373 syn match rubyRescueModifier "\<rescue\>" 374 375 syn cluster rubyModifier contains=rubyConditionalModifier,rubyRepeatModifier,rubyRescueModifier 376 377 SynFold 'do' syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 378 379 " curly bracket block or hash literal 380 SynFold '{' syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop 381 SynFold '[' syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\%(\w\|[^\x00-\x7F]\)[?!]\=\|[]})]\)\@2<!\[" end="]" contains=ALLBUT,@rubyNotTop 382 383 " statements without 'do' 384 SynFold 'begin' syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 385 SynFold 'case' syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" skip="\<end:" end="\<end\>" contains=ALLBUT,@rubyNotTop 386 387 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 388 389 syn match rubyConditional "\<\%(then\|else\|when\)\>" contained containedin=rubyCaseExpression 390 syn match rubyConditional "\<\%(then\|else\|elsif\)\>" contained containedin=rubyConditionalExpression 391 392 syn match rubyExceptionHandler "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyBlockExpression,rubyDoBlock 393 syn match rubyExceptionHandler2 "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>" contained containedin=rubyModuleBlock,rubyClassBlock,rubyMethodBlock 394 syn cluster rubyExceptionHandler contains=rubyExceptionHandler,rubyExceptionHandler2 395 396 " statements with optional 'do' 397 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 398 399 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 400 401 else 402 syn match rubyControl "\<def\>" nextgroup=rubyMethodDeclaration skipwhite skipnl 403 syn match rubyControl "\<class\>" nextgroup=rubyClassDeclaration skipwhite skipnl 404 syn match rubyControl "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl 405 syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|rescue\|ensure\|then\|when\|end\)\>" 406 syn match rubyKeyword "\<\%(alias\|undef\)\>" 407 endif 408 409 if !exists("ruby_minlines") 410 let ruby_minlines = 500 411 endif 412 exe "syn sync minlines=" . ruby_minlines 413 414 " Special Methods {{{1 415 if !exists("ruby_no_special_methods") 416 syn match rubyAccess "\<\%(public\|protected\|private\)\>" " use re=2 417 syn match rubyAccess "\%#=1\<\%(public\|private\)_class_method\>" 418 syn match rubyAccess "\%#=1\<\%(public\|private\)_constant\>" 419 syn match rubyAccess "\%#=1\<module_function\>" 420 syn match rubyAttribute "\%#=1\%(\%(^\|;\)\s*\)\@<=attr\>\%(\s*[.=]\)\@!" " attr is a common variable name 421 syn match rubyAttribute "\%#=1\<attr_\%(accessor\|reader\|writer\)\>" 422 syn match rubyControl "\%#=1\<\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>" 423 syn match rubyEval "\%#=1\<eval\>" 424 syn match rubyEval "\%#=1\<\%(class\|instance\|module\)_eval\>" 425 syn match rubyException "\%#=1\<\%(raise\|fail\|catch\|throw\)\>" 426 syn match rubyInclude "\%#=1\<\%(autoload\|gem\|load\|require\%(_relative\)\=\)\>" 427 syn match rubyKeyword "\%#=1\<\%(callcc\|caller\|lambda\|proc\)\>" 428 syn match rubyMacro "\%#=1\<\%(extend\|include\|prepend\|refine\|using\)\>" 429 syn match rubyMacro "\%#=1\<\%(alias\|define\|define_singleton\|remove\|undef\)_method\>" 430 endif 431 432 " Comments and Documentation {{{1 433 syn match rubySharpBang "\%^#!.*" display 434 syn keyword rubyTodo FIXME NOTE TODO OPTIMIZE HACK REVIEW XXX todo contained 435 syn match rubyEncoding "[[:alnum:]-_]\+" contained display 436 syn match rubyMagicComment "\c\%<3l#\s*\zs\%(coding\|encoding\):" contained nextgroup=rubyEncoding skipwhite 437 syn match rubyMagicComment "\c\%<10l#\s*\zs\%(frozen[-_]string[-_]literal\|warn[-_]indent\|warn[-_]past[-_]scope\):" contained nextgroup=rubyBoolean skipwhite 438 syn match rubyMagicComment "\c\%<10l#\s*\zs\%(shareable[-_]constant[-_]value\):" contained nextgroup=rubyEncoding skipwhite 439 syn match rubyComment "#.*" contains=@rubyCommentSpecial,rubySpaceError,@Spell 440 441 syn cluster rubyCommentSpecial contains=rubySharpBang,rubyTodo,rubyMagicComment 442 syn cluster rubyCommentNotTop contains=@rubyCommentSpecial,rubyEncoding 443 444 if !exists("ruby_no_comment_fold") && s:foldable('#') 445 syn region rubyMultilineComment start="^\s*#.*\n\%(^\s*#\)\@=" end="^\s*#.*\n\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend 446 syn region rubyDocumentation start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold 447 else 448 syn region rubyDocumentation start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell 449 endif 450 451 " {{{1 Useless Line Continuations 452 syn match rubyUselessLineContinuation "\%([.:,;{([<>~\*%&^|+=-]\|%(\%(\w\|[^\x00-\x7F]\)\@1<![?!]\)\s*\zs\\$" nextgroup=rubyUselessLineContinuation skipwhite skipempty 453 syn match rubyUselessLineContinuation "\\$" nextgroup=rubyUselessLineContinuation skipwhite skipempty contained 454 455 " Keyword Nobbling {{{1 456 " prevent methods with keyword names being highlighted as keywords when called 457 syn match rubyKeywordAsMethod "\%(\%(\.\@1<!\.\)\|&\.\|::\)\_s*\%([_[:lower:]][_[:alnum:]]*\|\%(BEGIN\|END\)\>\)" transparent contains=rubyDotOperator,rubyScopeOperator 458 459 " Bang and Predicate Methods and Operators {{{1 460 syn match rubyBangPredicateMethod "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]" 461 462 if !exists("ruby_no_special_methods") 463 syn match rubyControl "\%#=1\<exit!" display 464 endif 465 syn match rubyDefinedOperator "\%#=1\<defined?" display 466 467 " 1.9-style Hash Keys and Keyword Parameters {{{1 468 syn match rubySymbol "\%(\w\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[?!]\=::\@!"he=e-1 contained containedin=rubyBlockParameterList,rubyCurlyBlock 469 syn match rubySymbol "[]})\"':]\@1<!\<\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],;]\@="he=e-1 470 syn match rubySymbol "[[:space:],{(]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],;]\@="hs=s+1,he=e-1 471 syn match rubySingleQuoteSymbolDelimiter "'" contained 472 syn match rubySymbol "'\%(\\.\|[^']\)*'::\@!"he=e-1 contains=rubyQuoteEscape,rubyBackslashEscape,rubySingleQuoteSymbolDelimiter 473 syn match rubyDoubleQuoteSymbolDelimiter "\"" contained 474 syn match rubySymbol "\"\%(\\.\|[^\"]\)*\"::\@!"he=e-1 contains=@rubyStringSpecial,rubyDoubleQuoteSymbolDelimiter 475 476 " __END__ Directive {{{1 477 SynFold '__END__' syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" 478 479 " Default Highlighting {{{1 480 hi def link rubyClass rubyDefine 481 hi def link rubyModule rubyDefine 482 hi def link rubyExceptionHandler2 rubyDefine 483 hi def link rubyDefine Define 484 hi def link rubyAccess rubyMacro 485 hi def link rubyAttribute rubyMacro 486 hi def link rubyMacro Macro 487 hi def link rubyMethodName rubyFunction 488 hi def link rubyFunction Function 489 hi def link rubyConditional Conditional 490 hi def link rubyConditionalModifier rubyConditional 491 hi def link rubyExceptionHandler rubyConditional 492 hi def link rubyRescueModifier rubyExceptionHandler 493 hi def link rubyRepeat Repeat 494 hi def link rubyRepeatModifier rubyRepeat 495 hi def link rubyOptionalDo rubyRepeat 496 hi def link rubyControl Statement 497 hi def link rubyInclude Include 498 hi def link rubyInteger Number 499 hi def link rubyCharacter Character 500 hi def link rubyFloat Float 501 hi def link rubyBoolean Boolean 502 hi def link rubyException Exception 503 if !exists("ruby_no_identifiers") 504 hi def link rubyIdentifier Identifier 505 else 506 hi def link rubyIdentifier NONE 507 endif 508 hi def link rubyClassVariable rubyIdentifier 509 hi def link rubyConstant Type 510 hi def link rubyClassName rubyConstant 511 hi def link rubyModuleName rubyConstant 512 hi def link rubyGlobalVariable rubyIdentifier 513 hi def link rubyInstanceVariable rubyIdentifier 514 hi def link rubyPredefinedIdentifier rubyIdentifier 515 hi def link rubyPredefinedConstant rubyPredefinedIdentifier 516 hi def link rubyPredefinedVariable rubyPredefinedIdentifier 517 hi def link rubySymbol Constant 518 hi def link rubyKeyword Keyword 519 520 hi def link rubyOperator Operator 521 hi def link rubyDefinedOperator rubyOperator 522 hi def link rubyEnglishBooleanOperator rubyOperator 523 if exists("ruby_operators") 524 hi def link rubyTernaryOperator rubyOperator 525 hi def link rubyArithmeticOperator rubyOperator 526 hi def link rubyComparisonOperator rubyOperator 527 hi def link rubyBitwiseOperator rubyOperator 528 hi def link rubyBooleanOperator rubyOperator 529 hi def link rubyRangeOperator rubyOperator 530 hi def link rubyAssignmentOperator rubyOperator 531 hi def link rubyEqualityOperator rubyOperator 532 endif 533 534 if exists("ruby_pseudo_operators") 535 hi def link rubyPseudoOperator Special 536 hi def link rubyDotOperator rubyPseudoOperator 537 hi def link rubyScopeOperator rubyPseudoOperator 538 hi def link rubySuperClassOperator rubyPseudoOperator 539 hi def link rubyEigenClassOperator rubyPseudoOperator 540 hi def link rubyLambdaOperator rubyPseudoOperator 541 hi def link rubyDoubleSplatOperator rubyPseudoOperator 542 hi def link rubySplatOperator rubyPseudoOperator 543 hi def link rubyProcOperator rubyPseudoOperator 544 endif 545 546 hi def link rubyBeginEnd Statement 547 hi def link rubyEval Statement 548 hi def link rubyPseudoVariable Constant 549 hi def link rubyCapitalizedMethod NONE 550 551 hi def link rubyComment Comment 552 hi def link rubyEncoding Constant 553 hi def link rubyMagicComment SpecialComment 554 hi def link rubyData Comment 555 hi def link rubyDataDirective Delimiter 556 hi def link rubyDocumentation Comment 557 hi def link rubyTodo Todo 558 559 hi def link rubyBackslashEscape rubyStringEscape 560 hi def link rubyQuoteEscape rubyStringEscape 561 hi def link rubySpaceEscape rubyStringEscape 562 hi def link rubyParenthesisEscape rubyStringEscape 563 hi def link rubyCurlyBraceEscape rubyStringEscape 564 hi def link rubyAngleBracketEscape rubyStringEscape 565 hi def link rubySquareBracketEscape rubyStringEscape 566 hi def link rubyStringEscape Special 567 568 hi def link rubyInterpolationDelimiter Delimiter 569 hi def link rubySharpBang PreProc 570 hi def link rubyStringDelimiter Delimiter 571 hi def link rubyHeredocDelimiter rubyStringDelimiter 572 hi def link rubyPercentRegexpDelimiter rubyRegexpDelimiter 573 hi def link rubyPercentStringDelimiter rubyStringDelimiter 574 hi def link rubyPercentSymbolDelimiter rubySymbolDelimiter 575 hi def link rubyDoubleQuoteSymbolDelimiter rubySymbolDelimiter 576 hi def link rubySingleQuoteSymbolDelimiter rubySymbolDelimiter 577 hi def link rubyRegexpDelimiter rubyStringDelimiter 578 hi def link rubySymbolDelimiter rubySymbol 579 hi def link rubyString String 580 hi def link rubyRegexpEscape rubyRegexpSpecial 581 hi def link rubyRegexpQuantifier rubyRegexpSpecial 582 hi def link rubyRegexpAnchor rubyRegexpSpecial 583 hi def link rubyRegexpDot rubyRegexpCharClass 584 hi def link rubyRegexpCharClass rubyRegexpSpecial 585 hi def link rubyRegexpIntersection rubyRegexpSpecial 586 hi def link rubyRegexpSpecial Special 587 hi def link rubyRegexpComment Comment 588 hi def link rubyRegexp rubyString 589 590 hi def link rubyError Error 591 if exists("ruby_line_continuation_error") 592 hi def link rubyUselessLineContinuation rubyError 593 endif 594 hi def link rubyGlobalVariableError rubyError 595 hi def link rubySpaceError rubyError 596 597 " Postscript {{{1 598 let b:current_syntax = "ruby" 599 600 let &cpo = s:cpo_sav 601 unlet! s:cpo_sav 602 603 delc SynFold 604 605 " vim: nowrap sw=2 sts=2 ts=8 noet fdm=marker: