blob: 28f553decbde0c0de5ca7c02b9782231c50a9720 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00002" Language: Ruby
3" Maintainer: Doug Kearns <dougkearns@gmail.com>
Bram Moolenaarec7944a2013-06-12 21:29:15 +02004" URL: https://github.com/vim-ruby/vim-ruby
Bram Moolenaarc6249bb2006-04-15 20:25:09 +00005" Release Coordinator: Doug Kearns <dougkearns@gmail.com>
Bram Moolenaar6b730e12005-09-16 21:47:57 +00006" ----------------------------------------------------------------------------
7"
Bram Moolenaar071d4272004-06-13 20:20:40 +00008" Previous Maintainer: Mirko Nasato
Bram Moolenaar071d4272004-06-13 20:20:40 +00009" Thanks to perl.vim authors, and to Reimer Behrends. :-) (MN)
Bram Moolenaar6b730e12005-09-16 21:47:57 +000010" ----------------------------------------------------------------------------
Bram Moolenaar071d4272004-06-13 20:20:40 +000011
Bram Moolenaarc1762cc2007-05-10 16:56:30 +000012if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000013 finish
14endif
15
Bram Moolenaar6b730e12005-09-16 21:47:57 +000016if has("folding") && exists("ruby_fold")
17 setlocal foldmethod=syntax
18endif
19
Bram Moolenaar1d689522010-05-28 20:54:39 +020020syn cluster rubyNotTop contains=@rubyExtendedStringSpecial,@rubyRegexpSpecial,@rubyDeclaration,rubyConditional,rubyExceptional,rubyMethodExceptional,rubyTodo
Bram Moolenaarc236c162008-07-13 17:41:49 +000021
Bram Moolenaar6b730e12005-09-16 21:47:57 +000022if exists("ruby_space_errors")
23 if !exists("ruby_no_trail_space_error")
24 syn match rubySpaceError display excludenl "\s\+$"
25 endif
26 if !exists("ruby_no_tab_space_error")
27 syn match rubySpaceError display " \+\t"me=e-1
28 endif
29endif
30
Bram Moolenaar9964e462007-05-05 17:54:07 +000031" Operators
32if exists("ruby_operators")
Bram Moolenaarec7944a2013-06-12 21:29:15 +020033 syn match rubyOperator "[~!^&|*/%+-]\|\%(class\s*\)\@<!<<\|<=>\|<=\|\%(<\|\<class\s\+\u\w*\s*\)\@<!<[^<]\@=\|===\|==\|=\~\|>>\|>=\|=\@<!>\|\*\*\|\.\.\.\|\.\.\|::"
34 syn match rubyOperator "->\|-=\|/=\|\*\*=\|\*=\|&&=\|&=\|&&\|||=\||=\|||\|%=\|+=\|!\~\|!="
Bram Moolenaarc236c162008-07-13 17:41:49 +000035 syn region rubyBracketOperator matchgroup=rubyOperator start="\%(\w[?!]\=\|[]})]\)\@<=\[\s*" end="\s*]" contains=ALLBUT,@rubyNotTop
Bram Moolenaar9964e462007-05-05 17:54:07 +000036endif
37
Bram Moolenaar071d4272004-06-13 20:20:40 +000038" Expression Substitution and Backslash Notation
Bram Moolenaar1d689522010-05-28 20:54:39 +020039syn match rubyStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display
40syn match rubyStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
41syn match rubyQuoteEscape "\\[\\']" contained display
Bram Moolenaar9964e462007-05-05 17:54:07 +000042
Bram Moolenaarc236c162008-07-13 17:41:49 +000043syn region rubyInterpolation matchgroup=rubyInterpolationDelimiter start="#{" end="}" contained contains=ALLBUT,@rubyNotTop
Bram Moolenaar1d689522010-05-28 20:54:39 +020044syn match rubyInterpolation "#\%(\$\|@@\=\)\w\+" display contained contains=rubyInterpolationDelimiter,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable,rubyPredefinedVariable
Bram Moolenaar9964e462007-05-05 17:54:07 +000045syn match rubyInterpolationDelimiter "#\ze\%(\$\|@@\=\)\w\+" display contained
Bram Moolenaar1d689522010-05-28 20:54:39 +020046syn match rubyInterpolation "#\$\%(-\w\|\W\)" display contained contains=rubyInterpolationDelimiter,rubyPredefinedVariable,rubyInvalidVariable
Bram Moolenaarc1762cc2007-05-10 16:56:30 +000047syn match rubyInterpolationDelimiter "#\ze\$\%(-\w\|\W\)" display contained
Bram Moolenaar1d689522010-05-28 20:54:39 +020048syn region rubyNoInterpolation start="\\#{" end="}" contained
Bram Moolenaar9964e462007-05-05 17:54:07 +000049syn match rubyNoInterpolation "\\#{" display contained
50syn match rubyNoInterpolation "\\#\%(\$\|@@\=\)\w\+" display contained
Bram Moolenaar1d689522010-05-28 20:54:39 +020051syn match rubyNoInterpolation "\\#\$\W" display contained
Bram Moolenaar6b730e12005-09-16 21:47:57 +000052
53syn match rubyDelimEscape "\\[(<{\[)>}\]]" transparent display contained contains=NONE
54
Bram Moolenaar1d689522010-05-28 20:54:39 +020055syn region rubyNestedParentheses start="(" skip="\\\\\|\\)" matchgroup=rubyString end=")" transparent contained
56syn region rubyNestedCurlyBraces start="{" skip="\\\\\|\\}" matchgroup=rubyString end="}" transparent contained
57syn region rubyNestedAngleBrackets start="<" skip="\\\\\|\\>" matchgroup=rubyString end=">" transparent contained
58syn region rubyNestedSquareBrackets start="\[" skip="\\\\\|\\\]" matchgroup=rubyString end="\]" transparent contained
Bram Moolenaar6b730e12005-09-16 21:47:57 +000059
Bram Moolenaarc236c162008-07-13 17:41:49 +000060" These are mostly Oniguruma ready
Bram Moolenaar1d689522010-05-28 20:54:39 +020061syn region rubyRegexpComment matchgroup=rubyRegexpSpecial start="(?#" skip="\\)" end=")" contained
62syn region rubyRegexpParens matchgroup=rubyRegexpSpecial start="(\(?:\|?<\=[=!]\|?>\|?<[a-z_]\w*>\|?[imx]*-[imx]*:\=\|\%(?#\)\@!\)" skip="\\)" end=")" contained transparent contains=@rubyRegexpSpecial
63syn region rubyRegexpBrackets matchgroup=rubyRegexpCharClass start="\[\^\=" skip="\\\]" end="\]" contained transparent contains=rubyStringEscape,rubyRegexpEscape,rubyRegexpCharClass oneline
64syn match rubyRegexpCharClass "\\[DdHhSsWw]" contained display
65syn match rubyRegexpCharClass "\[:\^\=\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|xdigit\):\]" contained
66syn match rubyRegexpEscape "\\[].*?+^$|\\/(){}[]" contained
67syn match rubyRegexpQuantifier "[*?+][?+]\=" contained display
68syn match rubyRegexpQuantifier "{\d\+\%(,\d*\)\=}?\=" contained display
69syn match rubyRegexpAnchor "[$^]\|\\[ABbGZz]" contained display
70syn match rubyRegexpDot "\." contained display
71syn match rubyRegexpSpecial "|" contained display
72syn match rubyRegexpSpecial "\\[1-9]\d\=\d\@!" contained display
Bram Moolenaarc236c162008-07-13 17:41:49 +000073syn match rubyRegexpSpecial "\\k<\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\=>" contained display
74syn match rubyRegexpSpecial "\\k'\%([a-z_]\w*\|-\=\d\+\)\%([+-]\d\+\)\='" contained display
75syn match rubyRegexpSpecial "\\g<\%([a-z_]\w*\|-\=\d\+\)>" contained display
76syn match rubyRegexpSpecial "\\g'\%([a-z_]\w*\|-\=\d\+\)'" contained display
77
Bram Moolenaar1d689522010-05-28 20:54:39 +020078syn cluster rubyStringSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape
79syn cluster rubyExtendedStringSpecial contains=@rubyStringSpecial,rubyNestedParentheses,rubyNestedCurlyBraces,rubyNestedAngleBrackets,rubyNestedSquareBrackets
80syn cluster rubyRegexpSpecial contains=rubyInterpolation,rubyNoInterpolation,rubyStringEscape,rubyRegexpSpecial,rubyRegexpEscape,rubyRegexpBrackets,rubyRegexpCharClass,rubyRegexpDot,rubyRegexpQuantifier,rubyRegexpAnchor,rubyRegexpParens,rubyRegexpComment
Bram Moolenaar071d4272004-06-13 20:20:40 +000081
82" Numbers and ASCII Codes
Bram Moolenaarc1762cc2007-05-10 16:56:30 +000083syn match rubyASCIICode "\%(\w\|[]})\"'/]\)\@<!\%(?\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\=\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)\)"
Bram Moolenaar1d689522010-05-28 20:54:39 +020084syn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[xX]\x\+\%(_\x\+\)*\>" display
85syn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0[dD]\)\=\%(0\|[1-9]\d*\%(_\d\+\)*\)\>" display
86syn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[oO]\=\o\+\%(_\o\+\)*\>" display
87syn match rubyInteger "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<0[bB][01]\+\%(_[01]\+\)*\>" display
88syn match rubyFloat "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\.\d\+\%(_\d\+\)*\>" display
89syn match rubyFloat "\%(\%(\w\|[]})\"']\s*\)\@<!-\)\=\<\%(0\|[1-9]\d*\%(_\d\+\)*\)\%(\.\d\+\%(_\d\+\)*\)\=\%([eE][-+]\=\d\+\%(_\d\+\)*\)\>" display
Bram Moolenaar071d4272004-06-13 20:20:40 +000090
Bram Moolenaar6b730e12005-09-16 21:47:57 +000091" Identifiers
92syn match rubyLocalVariableOrMethod "\<[_[:lower:]][_[:alnum:]]*[?!=]\=" contains=NONE display transparent
93syn match rubyBlockArgument "&[_[:lower:]][_[:alnum:]]" contains=NONE display transparent
Bram Moolenaar071d4272004-06-13 20:20:40 +000094
Bram Moolenaar1d689522010-05-28 20:54:39 +020095syn match rubyConstant "\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
Bram Moolenaarec7944a2013-06-12 21:29:15 +020096syn match rubyClassVariable "@@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
97syn match rubyInstanceVariable "@\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" display
98syn match rubyGlobalVariable "$\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\|-.\)"
99syn match rubySymbol "[]})\"':]\@<!:\%(\^\|\~\|<<\|<=>\|<=\|<\|===\|[=!]=\|[=!]\~\|!\|>>\|>=\|>\||\|-@\|-\|/\|\[]=\|\[]\|\*\*\|\*\|&\|%\|+@\|+\|`\)"
Bram Moolenaar1d689522010-05-28 20:54:39 +0200100syn match rubySymbol "[]})\"':]\@<!:\$\%(-.\|[`~<=>_,;:!?/.'"@$*\&+0]\)"
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200101syn match rubySymbol "[]})\"':]\@<!:\%(\$\|@@\=\)\=\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*"
102syn match rubySymbol "[]})\"':]\@<!:\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\%([?!=]>\@!\)\="
Bram Moolenaar1d689522010-05-28 20:54:39 +0200103syn match rubySymbol "\%([{(,]\_s*\)\@<=\l\w*[!?]\=::\@!"he=e-1
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200104syn match rubySymbol "[]})\"':]\@<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:\s\@="he=e-1
105syn match rubySymbol "\%([{(,]\_s*\)\@<=[[:space:],{]\l\w*[!?]\=::\@!"hs=s+1,he=e-1
106syn match rubySymbol "[[:space:],{]\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:\s\@="hs=s+1,he=e-1
Bram Moolenaar1d689522010-05-28 20:54:39 +0200107syn region rubySymbol start="[]})\"':]\@<!:'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape fold
108syn region rubySymbol start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000109
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200110syn match rubyBlockParameter "\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*" contained
Bram Moolenaar1d689522010-05-28 20:54:39 +0200111syn region rubyBlockParameterList start="\%(\%(\<do\>\|{\)\s*\)\@<=|" end="|" oneline display contains=rubyBlockParameter
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000112
Bram Moolenaar1d689522010-05-28 20:54:39 +0200113syn match rubyInvalidVariable "$[^ A-Za-z_-]"
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200114syn match rubyPredefinedVariable #$[!$&"'*+,./0:;<=>?@\`~]#
115syn match rubyPredefinedVariable "$\d\+" display
Bram Moolenaar1e015462005-09-25 22:16:38 +0000116syn match rubyPredefinedVariable "$_\>" display
117syn match rubyPredefinedVariable "$-[0FIKadilpvw]\>" display
118syn match rubyPredefinedVariable "$\%(deferr\|defout\|stderr\|stdin\|stdout\)\>" display
119syn match rubyPredefinedVariable "$\%(DEBUG\|FILENAME\|KCODE\|LOADED_FEATURES\|LOAD_PATH\|PROGRAM_NAME\|SAFE\|VERBOSE\)\>" display
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000120syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(MatchingData\|ARGF\|ARGV\|ENV\)\>\%(\s*(\)\@!"
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200121syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(DATA\|FALSE\|NIL\)\>\%(\s*(\)\@!"
122syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(STDERR\|STDIN\|STDOUT\|TOPLEVEL_BINDING\|TRUE\)\>\%(\s*(\)\@!"
123syn match rubyPredefinedConstant "\%(\%(\.\@<!\.\)\@<!\|::\)\_s*\zs\%(RUBY_\%(VERSION\|RELEASE_DATE\|PLATFORM\|PATCHLEVEL\|REVISION\|DESCRIPTION\|COPYRIGHT\|ENGINE\)\)\>\%(\s*(\)\@!"
Bram Moolenaar071d4272004-06-13 20:20:40 +0000124
125" Normal Regular Expression
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200126syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\%(^\|\<\%(and\|or\|while\|until\|unless\|if\|elsif\|when\|not\|then\|else\)\|[;\~=!|&(,[<>?:*+-]\)\s*\)\@<=/" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
Bram Moolenaarc236c162008-07-13 17:41:49 +0000127syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="\%(\h\k*\s\+\)\@<=/[ \t=]\@!" end="/[iomxneus]*" skip="\\\\\|\\/" contains=@rubyRegexpSpecial fold
128
129" Generalized Regular Expression
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200130syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\z([~`!@#$%^&*_\-+=|\:;"',.? /]\)" end="\z1[iomxneus]*" skip="\\\\\|\\\z1" contains=@rubyRegexpSpecial fold
131syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r{" end="}[iomxneus]*" skip="\\\\\|\\}" contains=@rubyRegexpSpecial fold
132syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r<" end=">[iomxneus]*" skip="\\\\\|\\>" contains=@rubyRegexpSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
133syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r\[" end="\][iomxneus]*" skip="\\\\\|\\\]" contains=@rubyRegexpSpecial fold
134syn region rubyRegexp matchgroup=rubyRegexpDelimiter start="%r(" end=")[iomxneus]*" skip="\\\\\|\\)" contains=@rubyRegexpSpecial fold
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000135
136" Normal String and Shell Command Output
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200137syn region rubyString matchgroup=rubyStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=@rubyStringSpecial,@Spell fold
138syn region rubyString matchgroup=rubyStringDelimiter start="'" end="'" skip="\\\\\|\\'" contains=rubyQuoteEscape,@Spell fold
Bram Moolenaar9964e462007-05-05 17:54:07 +0000139syn region rubyString matchgroup=rubyStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=@rubyStringSpecial fold
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000140
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000141" Generalized Single Quoted String, Symbol and Array of Strings
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200142syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
143syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimEscape
144syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimEscape
145syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi]\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimEscape
146syn region rubyString matchgroup=rubyStringDelimiter start="%[qwi](" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimEscape
147syn region rubyString matchgroup=rubyStringDelimiter start="%q " end=" " skip="\\\\\|\\)" fold
148syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\z([~`!@#$%^&*_\-+=|\:;"',.? /]\)" end="\z1" skip="\\\\\|\\\z1" fold
149syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s{" end="}" skip="\\\\\|\\}" fold contains=rubyNestedCurlyBraces,rubyDelimEscape
150syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s<" end=">" skip="\\\\\|\\>" fold contains=rubyNestedAngleBrackets,rubyDelimEscape
151syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s\[" end="\]" skip="\\\\\|\\\]" fold contains=rubyNestedSquareBrackets,rubyDelimEscape
152syn region rubySymbol matchgroup=rubySymbolDelimiter start="%s(" end=")" skip="\\\\\|\\)" fold contains=rubyNestedParentheses,rubyDelimEscape
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000153
154" Generalized Double Quoted String and Array of Strings and Shell Command Output
155" Note: %= is not matched here as the beginning of a double quoted string
156syn region rubyString matchgroup=rubyStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200157syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=@rubyStringSpecial fold
158syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\={" end="}" skip="\\\\\|\\}" contains=@rubyStringSpecial,rubyNestedCurlyBraces,rubyDelimEscape fold
159syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=<" end=">" skip="\\\\\|\\>" contains=@rubyStringSpecial,rubyNestedAngleBrackets,rubyDelimEscape fold
160syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=\[" end="\]" skip="\\\\\|\\\]" contains=@rubyStringSpecial,rubyNestedSquareBrackets,rubyDelimEscape fold
161syn region rubyString matchgroup=rubyStringDelimiter start="%[QWIx]\=(" end=")" skip="\\\\\|\\)" contains=@rubyStringSpecial,rubyNestedParentheses,rubyDelimEscape fold
162syn region rubyString matchgroup=rubyStringDelimiter start="%[Qx] " end=" " skip="\\\\\|\\)" contains=@rubyStringSpecial fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000163
164" Here Document
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200165syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs\%(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
Bram Moolenaarc236c162008-07-13 17:41:49 +0000166syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs"\%([^"]*\)"+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
167syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs'\%([^']*\)'+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
168syn region rubyHeredocStart matchgroup=rubyStringDelimiter start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<-\=\zs`\%([^`]*\)`+ end=+$+ oneline contains=ALLBUT,@rubyNotTop
Bram Moolenaar071d4272004-06-13 20:20:40 +0000169
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200170syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
171syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<"\z([^"]*\)"\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
172syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<'\z([^']*\)'\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc fold keepend
173syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]})"'.]\)\s\|\w\)\@<!<<`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+2 matchgroup=rubyStringDelimiter end=+^\z1$+ contains=rubyHeredocStart,rubyHeredoc,@rubyStringSpecial fold keepend
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000174
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200175syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-\z(\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*\)\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
176syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-"\z([^"]*\)"\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
177syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-'\z([^']*\)'\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart fold keepend
178syn region rubyString start=+\%(\%(class\|::\)\_s*\|\%([]}).]\)\s\|\w\)\@<!<<-`\z([^`]*\)`\ze\%(.*<<-\=['`"]\=\h\)\@!+hs=s+3 matchgroup=rubyStringDelimiter end=+^\s*\zs\z1$+ contains=rubyHeredocStart,@rubyStringSpecial fold keepend
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000179
180if exists('main_syntax') && main_syntax == 'eruby'
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000181 let b:ruby_no_expensive = 1
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000182end
Bram Moolenaar071d4272004-06-13 20:20:40 +0000183
Bram Moolenaar1d689522010-05-28 20:54:39 +0200184syn match rubyAliasDeclaration "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable nextgroup=rubyAliasDeclaration2 skipwhite
185syn match rubyAliasDeclaration2 "[^[:space:];#.()]\+" contained contains=rubySymbol,rubyGlobalVariable,rubyPredefinedVariable
186syn match rubyMethodDeclaration "[^[:space:];#(]\+" contained contains=rubyConstant,rubyBoolean,rubyPseudoVariable,rubyInstanceVariable,rubyClassVariable,rubyGlobalVariable
187syn match rubyClassDeclaration "[^[:space:];#<]\+" contained contains=rubyConstant,rubyOperator
188syn match rubyModuleDeclaration "[^[:space:];#<]\+" contained contains=rubyConstant,rubyOperator
189syn match rubyFunction "\<[_[:alpha:]][_[:alnum:]]*[?!=]\=[[:alnum:]_.:?!=]\@!" contained containedin=rubyMethodDeclaration
Bram Moolenaar9964e462007-05-05 17:54:07 +0000190syn match rubyFunction "\%(\s\|^\)\@<=[_[:alpha:]][_[:alnum:]]*[?!=]\=\%(\s\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200191syn match rubyFunction "\%([[:space:].]\|^\)\@<=\%(\[\]=\=\|\*\*\|[+-]@\=\|[*/%|&^~]\|<<\|>>\|[<>]=\=\|<=>\|===\|[=!]=\|[=!]\~\|!\|`\)\%([[:space:];#(]\|$\)\@=" contained containedin=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000192
Bram Moolenaar1d689522010-05-28 20:54:39 +0200193syn cluster rubyDeclaration contains=rubyAliasDeclaration,rubyAliasDeclaration2,rubyMethodDeclaration,rubyModuleDeclaration,rubyClassDeclaration,rubyFunction,rubyBlockParameter
194
195" Keywords
196" Note: the following keywords have already been defined:
197" begin case class def do end for if module unless until while
198syn match rubyControl "\<\%(and\|break\|in\|next\|not\|or\|redo\|rescue\|retry\|return\)\>[?!]\@!"
199syn match rubyOperator "\<defined?" display
200syn match rubyKeyword "\<\%(super\|yield\)\>[?!]\@!"
201syn match rubyBoolean "\<\%(true\|false\)\>[?!]\@!"
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200202syn match rubyPseudoVariable "\<\%(nil\|self\|__ENCODING__\|__FILE__\|__LINE__\|__callee__\|__method__\)\>[?!]\@!" " TODO: reorganise
Bram Moolenaar1d689522010-05-28 20:54:39 +0200203syn match rubyBeginEnd "\<\%(BEGIN\|END\)\>[?!]\@!"
Bram Moolenaarc236c162008-07-13 17:41:49 +0000204
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000205" Expensive Mode - match 'end' with the appropriate opening keyword for syntax
206" based folding and special highlighting of module/class/method definitions
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000207if !exists("b:ruby_no_expensive") && !exists("ruby_no_expensive")
Bram Moolenaar1d689522010-05-28 20:54:39 +0200208 syn match rubyDefine "\<alias\>" nextgroup=rubyAliasDeclaration skipwhite skipnl
209 syn match rubyDefine "\<def\>" nextgroup=rubyMethodDeclaration skipwhite skipnl
210 syn match rubyDefine "\<undef\>" nextgroup=rubyFunction skipwhite skipnl
211 syn match rubyClass "\<class\>" nextgroup=rubyClassDeclaration skipwhite skipnl
212 syn match rubyModule "\<module\>" nextgroup=rubyModuleDeclaration skipwhite skipnl
213
214 syn region rubyMethodBlock start="\<def\>" matchgroup=rubyDefine end="\%(\<def\_s\+\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
215 syn region rubyBlock start="\<class\>" matchgroup=rubyClass end="\<end\>" contains=ALLBUT,@rubyNotTop fold
216 syn region rubyBlock start="\<module\>" matchgroup=rubyModule end="\<end\>" contains=ALLBUT,@rubyNotTop fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000218 " modifiers
Bram Moolenaar1d689522010-05-28 20:54:39 +0200219 syn match rubyConditionalModifier "\<\%(if\|unless\)\>" display
220 syn match rubyRepeatModifier "\<\%(while\|until\)\>" display
Bram Moolenaar071d4272004-06-13 20:20:40 +0000221
Bram Moolenaar1d689522010-05-28 20:54:39 +0200222 syn region rubyDoBlock matchgroup=rubyControl start="\<do\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000223 " curly bracket block or hash literal
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200224 syn region rubyCurlyBlock matchgroup=rubyCurlyBlockDelimiter start="{" end="}" contains=ALLBUT,@rubyNotTop fold
225 syn region rubyArrayLiteral matchgroup=rubyArrayDelimiter start="\%(\w\|[\]})]\)\@<!\[" end="]" contains=ALLBUT,@rubyNotTop fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000226
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000227 " statements without 'do'
Bram Moolenaarc236c162008-07-13 17:41:49 +0000228 syn region rubyBlockExpression matchgroup=rubyControl start="\<begin\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
229 syn region rubyCaseExpression matchgroup=rubyConditional start="\<case\>" end="\<end\>" contains=ALLBUT,@rubyNotTop fold
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200230 syn region rubyConditionalExpression matchgroup=rubyConditional start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+=-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![?!]\)\s*\)\@<=\%(if\|unless\)\>" end="\%(\%(\%(\.\@<!\.\)\|::\)\s*\)\@<!\<end\>" contains=ALLBUT,@rubyNotTop fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000231
Bram Moolenaar1d689522010-05-28 20:54:39 +0200232 syn match rubyConditional "\<\%(then\|else\|when\)\>[?!]\@!" contained containedin=rubyCaseExpression
Bram Moolenaarc236c162008-07-13 17:41:49 +0000233 syn match rubyConditional "\<\%(then\|else\|elsif\)\>[?!]\@!" contained containedin=rubyConditionalExpression
Bram Moolenaar071d4272004-06-13 20:20:40 +0000234
Bram Moolenaar1d689522010-05-28 20:54:39 +0200235 syn match rubyExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyBlockExpression
236 syn match rubyMethodExceptional "\<\%(\%(\%(;\|^\)\s*\)\@<=rescue\|else\|ensure\)\>[?!]\@!" contained containedin=rubyMethodBlock
237
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000238 " statements with optional 'do'
Bram Moolenaarc236c162008-07-13 17:41:49 +0000239 syn region rubyOptionalDoLine matchgroup=rubyRepeat start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyOptionalDo end="\%(\<do\>\)" end="\ze\%(;\|$\)" oneline contains=ALLBUT,@rubyNotTop
240 syn region rubyRepeatExpression start="\<for\>[?!]\@!" start="\%(\%(^\|\.\.\.\=\|[{:,;([<>~\*/%&^|+-]\|\%(\<[_[:lower:]][_[:alnum:]]*\)\@<![!=?]\)\s*\)\@<=\<\%(until\|while\)\>" matchgroup=rubyRepeat end="\<end\>" contains=ALLBUT,@rubyNotTop nextgroup=rubyOptionalDoLine fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000241
242 if !exists("ruby_minlines")
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200243 let ruby_minlines = 500
Bram Moolenaar071d4272004-06-13 20:20:40 +0000244 endif
245 exec "syn sync minlines=" . ruby_minlines
246
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000247else
Bram Moolenaar1d689522010-05-28 20:54:39 +0200248 syn match rubyControl "\<def\>[?!]\@!" nextgroup=rubyMethodDeclaration skipwhite skipnl
249 syn match rubyControl "\<class\>[?!]\@!" nextgroup=rubyClassDeclaration skipwhite skipnl
250 syn match rubyControl "\<module\>[?!]\@!" nextgroup=rubyModuleDeclaration skipwhite skipnl
251 syn match rubyControl "\<\%(case\|begin\|do\|for\|if\|unless\|while\|until\|else\|elsif\|ensure\|then\|when\|end\)\>[?!]\@!"
252 syn match rubyKeyword "\<\%(alias\|undef\)\>[?!]\@!"
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000253endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000254
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000255" Special Methods
256if !exists("ruby_no_special_methods")
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200257 syn keyword rubyAccess public protected private public_class_method private_class_method public_constant private_constant module_function
Bram Moolenaarc236c162008-07-13 17:41:49 +0000258 " attr is a common variable name
259 syn match rubyAttribute "\%(\%(^\|;\)\s*\)\@<=attr\>\(\s*[.=]\)\@!"
260 syn keyword rubyAttribute attr_accessor attr_reader attr_writer
261 syn match rubyControl "\<\%(exit!\|\%(abort\|at_exit\|exit\|fork\|loop\|trap\)\>[?!]\@!\)"
Bram Moolenaard5cdbeb2005-10-10 20:59:28 +0000262 syn keyword rubyEval eval class_eval instance_eval module_eval
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000263 syn keyword rubyException raise fail catch throw
Bram Moolenaarc236c162008-07-13 17:41:49 +0000264 " false positive with 'include?'
265 syn match rubyInclude "\<include\>[?!]\@!"
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200266 syn keyword rubyInclude autoload extend load prepend require require_relative
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000267 syn keyword rubyKeyword callcc caller lambda proc
268endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000269
270" Comments and Documentation
Bram Moolenaar1d689522010-05-28 20:54:39 +0200271syn match rubySharpBang "\%^#!.*" display
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200272syn keyword rubyTodo FIXME NOTE TODO OPTIMIZE XXX todo contained
Bram Moolenaar1d689522010-05-28 20:54:39 +0200273syn match rubyComment "#.*" contains=rubySharpBang,rubySpaceError,rubyTodo,@Spell
Bram Moolenaar9964e462007-05-05 17:54:07 +0000274if !exists("ruby_no_comment_fold")
275 syn region rubyMultilineComment start="\%(\%(^\s*#.*\n\)\@<!\%(^\s*#.*\n\)\)\%(\(^\s*#.*\n\)\{1,}\)\@=" end="\%(^\s*#.*\n\)\@<=\%(^\s*#.*\n\)\%(^\s*#\)\@!" contains=rubyComment transparent fold keepend
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200276 syn region rubyDocumentation start="^=begin\ze\%(\s.*\)\=$" end="^=end\%(\s.*\)\=$" contains=rubySpaceError,rubyTodo,@Spell fold
Bram Moolenaar9964e462007-05-05 17:54:07 +0000277else
278 syn region rubyDocumentation start="^=begin\s*$" end="^=end\s*$" contains=rubySpaceError,rubyTodo,@Spell
279endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000280
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000281" Note: this is a hack to prevent 'keywords' being highlighted as such when called as methods with an explicit receiver
Bram Moolenaar1d689522010-05-28 20:54:39 +0200282syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(alias\|and\|begin\|break\|case\|class\|def\|defined\|do\|else\)\>" transparent contains=NONE
283syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(elsif\|end\|ensure\|false\|for\|if\|in\|module\|next\|nil\)\>" transparent contains=NONE
284syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(not\|or\|redo\|rescue\|retry\|return\|self\|super\|then\|true\)\>" transparent contains=NONE
285syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(undef\|unless\|until\|when\|while\|yield\|BEGIN\|END\|__FILE__\|__LINE__\)\>" transparent contains=NONE
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000286
Bram Moolenaar1d689522010-05-28 20:54:39 +0200287syn match rubyKeywordAsMethod "\<\%(alias\|begin\|case\|class\|def\|do\|end\)[?!]" transparent contains=NONE
288syn match rubyKeywordAsMethod "\<\%(if\|module\|undef\|unless\|until\|while\)[?!]" transparent contains=NONE
Bram Moolenaarc236c162008-07-13 17:41:49 +0000289
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200290syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(abort\|at_exit\|attr\|attr_accessor\|attr_reader\)\>" transparent contains=NONE
291syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(attr_writer\|autoload\|callcc\|catch\|caller\)\>" transparent contains=NONE
292syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(eval\|class_eval\|instance_eval\|module_eval\|exit\)\>" transparent contains=NONE
293syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(extend\|fail\|fork\|include\|lambda\)\>" transparent contains=NONE
294syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(load\|loop\|prepend\|private\|proc\|protected\)\>" transparent contains=NONE
295syn match rubyKeywordAsMethod "\%(\%(\.\@<!\.\)\|::\)\_s*\%(public\|require\|require_relative\|raise\|throw\|trap\)\>" transparent contains=NONE
Bram Moolenaar071d4272004-06-13 20:20:40 +0000296
297" __END__ Directive
Bram Moolenaar6b730e12005-09-16 21:47:57 +0000298syn region rubyData matchgroup=rubyDataDirective start="^__END__$" end="\%$" fold
Bram Moolenaar071d4272004-06-13 20:20:40 +0000299
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000300hi def link rubyClass rubyDefine
301hi def link rubyModule rubyDefine
Bram Moolenaar1d689522010-05-28 20:54:39 +0200302hi def link rubyMethodExceptional rubyDefine
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000303hi def link rubyDefine Define
304hi def link rubyFunction Function
305hi def link rubyConditional Conditional
306hi def link rubyConditionalModifier rubyConditional
Bram Moolenaar1d689522010-05-28 20:54:39 +0200307hi def link rubyExceptional rubyConditional
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000308hi def link rubyRepeat Repeat
309hi def link rubyRepeatModifier rubyRepeat
310hi def link rubyOptionalDo rubyRepeat
311hi def link rubyControl Statement
312hi def link rubyInclude Include
313hi def link rubyInteger Number
314hi def link rubyASCIICode Character
315hi def link rubyFloat Float
316hi def link rubyBoolean Boolean
317hi def link rubyException Exception
318if !exists("ruby_no_identifiers")
319 hi def link rubyIdentifier Identifier
320else
321 hi def link rubyIdentifier NONE
Bram Moolenaar071d4272004-06-13 20:20:40 +0000322endif
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000323hi def link rubyClassVariable rubyIdentifier
324hi def link rubyConstant Type
325hi def link rubyGlobalVariable rubyIdentifier
326hi def link rubyBlockParameter rubyIdentifier
327hi def link rubyInstanceVariable rubyIdentifier
328hi def link rubyPredefinedIdentifier rubyIdentifier
329hi def link rubyPredefinedConstant rubyPredefinedIdentifier
330hi def link rubyPredefinedVariable rubyPredefinedIdentifier
331hi def link rubySymbol Constant
332hi def link rubyKeyword Keyword
333hi def link rubyOperator Operator
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000334hi def link rubyBeginEnd Statement
335hi def link rubyAccess Statement
336hi def link rubyAttribute Statement
337hi def link rubyEval Statement
338hi def link rubyPseudoVariable Constant
339
340hi def link rubyComment Comment
341hi def link rubyData Comment
342hi def link rubyDataDirective Delimiter
343hi def link rubyDocumentation Comment
Bram Moolenaarc236c162008-07-13 17:41:49 +0000344hi def link rubyTodo Todo
345
Bram Moolenaar1d689522010-05-28 20:54:39 +0200346hi def link rubyQuoteEscape rubyStringEscape
Bram Moolenaarc236c162008-07-13 17:41:49 +0000347hi def link rubyStringEscape Special
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000348hi def link rubyInterpolationDelimiter Delimiter
349hi def link rubyNoInterpolation rubyString
350hi def link rubySharpBang PreProc
351hi def link rubyRegexpDelimiter rubyStringDelimiter
Bram Moolenaarc236c162008-07-13 17:41:49 +0000352hi def link rubySymbolDelimiter rubyStringDelimiter
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000353hi def link rubyStringDelimiter Delimiter
Bram Moolenaarec7944a2013-06-12 21:29:15 +0200354hi def link rubyHeredoc rubyString
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000355hi def link rubyString String
Bram Moolenaarc236c162008-07-13 17:41:49 +0000356hi def link rubyRegexpEscape rubyRegexpSpecial
357hi def link rubyRegexpQuantifier rubyRegexpSpecial
358hi def link rubyRegexpAnchor rubyRegexpSpecial
359hi def link rubyRegexpDot rubyRegexpCharClass
360hi def link rubyRegexpCharClass rubyRegexpSpecial
361hi def link rubyRegexpSpecial Special
362hi def link rubyRegexpComment Comment
363hi def link rubyRegexp rubyString
Bram Moolenaarc1762cc2007-05-10 16:56:30 +0000364
365hi def link rubyInvalidVariable Error
366hi def link rubyError Error
367hi def link rubySpaceError rubyError
Bram Moolenaar071d4272004-06-13 20:20:40 +0000368
369let b:current_syntax = "ruby"
370
Bram Moolenaarc236c162008-07-13 17:41:49 +0000371" vim: nowrap sw=2 sts=2 ts=8 noet: