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