julia.vim (38191B)
1 " Vim syntax file 2 " Language: julia 3 " Maintainer: Carlo Baldassi <carlobaldassi@gmail.com> 4 " Homepage: https://github.com/JuliaEditorSupport/julia-vim 5 " Last Change: 2021 Aug 04 6 " 2025 Dec 08 by Vim Project (update syntax script from upstream #18894) 7 8 if version < 600 9 syntax clear 10 elseif exists("b:current_syntax") 11 finish 12 endif 13 14 let s:cpo_save = &cpo 15 set cpo&vim 16 17 if version < 704 18 " this is used to disable regex syntax like `\@3<=' 19 " on older vim versions 20 function! s:d(x) 21 return '' 22 endfunction 23 else 24 function! s:d(x) 25 return string(a:x) 26 endfunction 27 endif 28 29 scriptencoding utf-8 30 31 let s:julia_spellcheck_strings = get(g:, "julia_spellcheck_strings", 0) 32 let s:julia_spellcheck_docstrings = get(g:, "julia_spellcheck_docstrings", 1) 33 let s:julia_spellcheck_comments = get(g:, "julia_spellcheck_comments", 1) 34 35 let s:julia_highlight_operators = get(g:, "julia_highlight_operators", 1) 36 37 " List of characters, up to \UFF, which cannot be used in identifiers. 38 " (It includes operator characters; we don't consider them identifiers.) 39 " This is used mostly in lookbehinds with `\@<=`, e.g. when we need to check 40 " that that we're not in the middle of an identifier. 41 " It doesn't include a few characters (spaces and all closing parentheses) 42 " because those may or may not be valid in the lookbehind on a case-by-case 43 " basis. 44 let s:nonid_chars = '\U00-\U08' . '\U0A-\U1F' 45 \ . '\U21-\U28' . '\U2A-\U2F' . '\U3A-\U40' . '\U5B\U5C\U5E' . '\U60' . '\U7B\U7C' 46 \ . '\U7E-\UA1' . '\UA7\UA8' . '\UAB-\UAD' . '\UAF\UB1\UB4' . '\UB6-\UB8' . '\UBB\UBF' . '\UD7\UF7' 47 48 " The complete list 49 let s:nonidS_chars = '[:space:])\U5D}' . s:nonid_chars 50 51 52 " List of all valid operator chars up to \UFF (NOTE: they must all be included 53 " in s:nonidS_chars, so that if we include that, then this is redundant) 54 " It does not include '!' since it can be used in an identifier. 55 " The list contains the following characters: '%&*+-/<=>\\^|~¬±×÷' 56 let s:op_chars = '\U25\U26\U2A\U2B\U2D\U2F\U3C-\U3E\U5C\U5E\U7C\U7E\UAC\UB1\UD7\UF7' 57 58 " List of all valid operator chars above \UFF 59 " Written with ranges for performance reasons 60 " The list contains the following characters: '…⁝⅋←↑→↓↔↚↛↜↝↞↠↢↣↤↦↩↪↫↬↮↶↷↺↻↼↽⇀⇁⇄⇆⇇⇉⇋⇌⇍⇎⇏⇐⇒⇔⇚⇛⇜⇝⇠⇢⇴⇵⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿∈∉∊∋∌∍∓∔∗∘∙√∛∜∝∤∥∦∧∨∩∪∷∸∺∻∽∾≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊞⊟⊠⊡⊢⊣⊩⊬⊮⊰⊱⊲⊳⊴⊵⊶⊷⊻⊼⊽⋄⋅⋆⋇⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⌿▷⟂⟈⟉⟑⟒⟕⟖⟗⟰⟱⟵⟶⟷⟹⟺⟻⟼⟽⟾⟿⤀⤁⤂⤃⤄⤅⤆⤇⤈⤉⤊⤋⤌⤍⤎⤏⤐⤑⤒⤓⤔⤕⤖⤗⤘⤝⤞⤟⤠⥄⥅⥆⥇⥈⥉⥊⥋⥌⥍⥎⥏⥐⥑⥒⥓⥔⥕⥖⥗⥘⥙⥚⥛⥜⥝⥞⥟⥠⥡⥢⥣⥤⥥⥦⥧⥨⥩⥪⥫⥬⥭⥮⥯⥰⦷⦸⦼⦾⦿⧀⧁⧡⧣⧤⧥⧴⧶⧷⧺⧻⨇⨈⨝⨟⨢⨣⨤⨥⨦⨧⨨⨩⨪⨫⨬⨭⨮⨰⨱⨲⨳⨴⨵⨶⨷⨸⨹⨺⨻⨼⨽⩀⩁⩂⩃⩄⩅⩊⩋⩌⩍⩎⩏⩐⩑⩒⩓⩔⩕⩖⩗⩘⩚⩛⩜⩝⩞⩟⩠⩡⩢⩣⩦⩧⩪⩫⩬⩭⩮⩯⩰⩱⩲⩳⩴⩵⩶⩷⩸⩹⩺⩻⩼⩽⩾⩿⪀⪁⪂⪃⪄⪅⪆⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒⪓⪔⪕⪖⪗⪘⪙⪚⪛⪜⪝⪞⪟⪠⪡⪢⪣⪤⪥⪦⪧⪨⪩⪪⪫⪬⪭⪮⪯⪰⪱⪲⪳⪴⪵⪶⪷⪸⪹⪺⪻⪼⪽⪾⪿⫀⫁⫂⫃⫄⫅⫆⫇⫈⫉⫊⫋⫌⫍⫎⫏⫐⫑⫒⫓⫔⫕⫖⫗⫘⫙⫛⫷⫸⫹⫺⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿⭀⭁⭂⭃⭄⭇⭈⭉⭊⭋⭌←↑→↓' 61 let s:op_chars_wc = '\U2026\U205D\U214B\U2190-\U2194\U219A-\U219E\U21A0\U21A2-\U21A4\U21A6\U21A9-\U21AC\U21AE\U21B6\U21B7\U21BA-\U21BD\U21C0\U21C1\U21C4\U21C6\U21C7\U21C9\U21CB-\U21D0\U21D2\U21D4\U21DA-\U21DD\U21E0\U21E2\U21F4-\U21FF\U2208-\U220D\U2213\U2214\U2217-\U221D\U2224-\U222A\U2237\U2238\U223A\U223B\U223D\U223E\U2240-\U228B\U228D-\U229C\U229E-\U22A3\U22A9\U22AC\U22AE\U22B0-\U22B7\U22BB-\U22BD\U22C4-\U22C7\U22C9-\U22D3\U22D5-\U22FF\U233F\U25B7\U27C2\U27C8\U27C9\U27D1\U27D2\U27D5-\U27D7\U27F0\U27F1\U27F5-\U27F7\U27F9-\U27FF\U2900-\U2918\U291D-\U2920\U2944-\U2970\U29B7\U29B8\U29BC\U29BE-\U29C1\U29E1\U29E3-\U29E5\U29F4\U29F6\U29F7\U29FA\U29FB\U2A07\U2A08\U2A1D\U2A1F\U2A22-\U2A2E\U2A30-\U2A3D\U2A40-\U2A45\U2A4A-\U2A58\U2A5A-\U2A63\U2A66\U2A67\U2A6A-\U2AD9\U2ADB\U2AF7-\U2AFA\U2B30-\U2B44\U2B47-\U2B4C\UFFE9-\UFFEC' 62 63 64 " Characters that can be used to start an identifier. Above \UBF we don't 65 " bother checking. (If a UTF8 operator is used, it will take precedence anyway.) 66 let s:id_charsH = '\%([A-Za-z_\UA2-\UA6\UA9\UAA\UAE\UB0\UB5\UBA]\|[^\U00-\UBF]\)' 67 " Characters that can appear in an identifier, starting in 2nd position. Above 68 " \UBF we check for operators since we need to stop the identifier if one 69 " appears. We don't check for invalid characters though. 70 let s:id_charsW = '\%([0-9A-Za-z_!\UA2-\UA6\UA9\UAA\UAE-\UB0\UB2-\UB5\UB8-\UBA\UBC-\UBE]\|[^\U00-\UBF]\@=[^' . s:op_chars_wc . ']\)' 71 72 " A valid julia identifier, more or less 73 let s:idregex = '\%(' . s:id_charsH . s:id_charsW . '*\)' 74 75 " Full operators regex 76 let s:operators = '\%(' . '\.\%([-+*/^÷%|&⊻]\|//\|\\\|>>\|>>>\?\)\?=' 77 \ . '\|' . '[!:<>]=\|||\|&&\||>\|<|\|[<>:]:\|<<\|>>>\?\|//\|[-=]>\|\.\.\.\?' 78 \ . '\|' . '\.!' . '\|'.s:id_charsW.'\@'.s:d(1).'<!!' 79 \ . '\|' . '\.\?[' . s:op_chars . s:op_chars_wc . ']' 80 \ . '\)' 81 82 83 syn case match 84 85 syntax cluster juliaExpressions contains=@juliaParItems,@juliaStringItems,@juliaKeywordItems,@juliaBlocksItems,@juliaTypesItems,@juliaConstItems,@juliaMacroItems,@juliaSymbolItems,@juliaOperatorItems,@juliaNumberItems,@juliaCommentItems,@juliaErrorItems,@juliaSyntaxRegions 86 syntax cluster juliaExprsPrintf contains=@juliaExpressions,@juliaPrintfItems 87 syntax cluster juliaExprsNodot contains=@juliaParItems,@juliaStringItems,@juliaMacroItems,@juliaSymbolItems,@juliaOperatorItems,@juliaCommentItems,juliaIdSymbol 88 89 syntax cluster juliaParItems contains=juliaParBlock,juliaSqBraIdxBlock,juliaSqBraBlock,juliaCurBraBlock,juliaQuotedParBlock,juliaQuotedQMarkPar 90 syntax cluster juliaKeywordItems contains=juliaKeyword,juliaWhereKeyword,juliaImportLine,juliaInfixKeyword,juliaRepKeyword 91 syntax cluster juliaBlocksItems contains=juliaConditionalBlock,juliaWhileBlock,juliaForBlock,juliaBeginBlock,juliaFunctionBlock,juliaMacroBlock,juliaQuoteBlock,juliaExceptionBlock,juliaLetBlock,juliaDoBlock,juliaModuleBlock,juliaStructBlock,juliaMutableStructBlock,juliaAbstractBlock,juliaPrimitiveBlock 92 syntax cluster juliaTypesItems contains=juliaBaseTypeBasic,juliaBaseTypeNum,juliaBaseTypeC,juliaBaseTypeError,juliaBaseTypeIter,juliaBaseTypeString,juliaBaseTypeArray,juliaBaseTypeDict,juliaBaseTypeSet,juliaBaseTypeIO,juliaBaseTypeProcess,juliaBaseTypeRange,juliaBaseTypeRegex,juliaBaseTypeFact,juliaBaseTypeSort,juliaBaseTypeRound,juliaBaseTypeSpecial,juliaBaseTypeRandom,juliaBaseTypeDisplay,juliaBaseTypeTime,juliaBaseTypeOther 93 94 syntax cluster juliaConstItems contains=juliaConstNum,juliaConstBool,juliaConstEnv,juliaConstC,juliaConstGeneric,juliaConstIO,juliaPossibleEuler 95 96 syntax cluster juliaMacroItems contains=juliaPossibleMacro,juliaDollarVar,juliaDollarPar,juliaDollarSqBra 97 syntax cluster juliaSymbolItems contains=juliaPossibleSymbol 98 syntax cluster juliaNumberItems contains=juliaNumbers 99 syntax cluster juliaStringItems contains=juliaChar,juliaString,juliabString,juliasString,juliaShellString,juliaDocString,juliaRegEx 100 syntax cluster juliaPrintfItems contains=juliaPrintfParBlock,juliaPrintfString 101 syntax cluster juliaOperatorItems contains=juliaOperator,juliaRangeOperator,juliaCTransOperator,juliaTernaryRegion,juliaColon,juliaSemicolon,juliaComma 102 syntax cluster juliaCommentItems contains=juliaCommentL,juliaCommentM 103 syntax cluster juliaErrorItems contains=juliaErrorPar,juliaErrorEnd,juliaErrorElse,juliaErrorCatch,juliaErrorFinally 104 105 syntax cluster juliaSyntaxRegions contains=juliaIdSymbol,juliaTypeOperatorR2,juliaTypeOperatorR3,juliaWhereR,juliaDotted 106 107 syntax cluster juliaSpellcheckStrings contains=@spell 108 syntax cluster juliaSpellcheckDocStrings contains=@spell 109 syntax cluster juliaSpellcheckComments contains=@spell 110 111 if !s:julia_spellcheck_docstrings 112 syntax cluster juliaSpellcheckDocStrings remove=@spell 113 endif 114 if !s:julia_spellcheck_strings 115 syntax cluster juliaSpellcheckStrings remove=@spell 116 endif 117 if !s:julia_spellcheck_comments 118 syntax cluster juliaSpellcheckComments remove=@spell 119 endif 120 121 syntax match juliaSemicolon display ";" 122 syntax match juliaComma display "," 123 syntax match juliaColon display ":" 124 125 " A dot can introduce a sort of 'environment' such that words after it are not 126 " recognized as keywords. This has low precedence so that it can be overridden 127 " by operators 128 syntax match juliaDotted transparent "\.\s*[^])}.]" contains=@juliaExprsNodot 129 syntax match juliaDottedT contained transparent "\.\s*[^])}.]" contains=@juliaExprsNodot,juliaType 130 131 syntax match juliaErrorPar display "[])}]" 132 syntax match juliaErrorEnd display "\<end\>" 133 syntax match juliaErrorElse display "\<\%(else\|elseif\)\>" 134 syntax match juliaErrorCatch display "\<catch\>" 135 syntax match juliaErrorFinally display "\<finally\>" 136 syntax match juliaErrorSemicol display contained ";" 137 138 syntax region juliaParBlock matchgroup=juliaParDelim start="(" end=")" contains=@juliaExpressions,juliaComprehensionFor 139 syntax region juliaParBlockInRange matchgroup=juliaParDelim contained start="(" end=")" contains=@juliaExpressions,juliaParBlockInRange,juliaRangeKeyword,juliaComprehensionFor 140 syntax region juliaSqBraIdxBlock matchgroup=juliaParDelim start="\[" end="\]" contains=@juliaExpressions,juliaParBlockInRange,juliaRangeKeyword,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS 141 exec 'syntax region juliaSqBraBlock matchgroup=juliaParDelim start="\%(^\|\s\|' . s:operators . '\)\@'.s:d(3).'<=\[" end="\]" contains=@juliaExpressions,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS' 142 syntax region juliaCurBraBlock matchgroup=juliaParDelim start="{" end="}" contains=juliaType,juliaDottedT,@juliaExpressions 143 144 exec 'syntax match juliaType contained "\%(' . s:idregex . '\.\)*\zs' . s:idregex . '"' 145 146 " This is a generic identifier followed by some symbol, either a type 147 " operator (<: or >:), or an open parenthesis, or an open curly bracket. 148 " It's used to recognize one of the contained regions looking for identifiers 149 " only once. Once recognized, those regions no longer need to use the 150 " expensive s:idregex. 151 exec 'syntax match juliaIdSymbol transparent "' . s:idregex . '\%(\s*[<>]:\|\.\?(\|{\|\"\)\@=" contains=juliaFunctionCall,juliaParamType,juliaStringPrefixed,juliaTypeOperatorR1' 152 153 syntax match juliaFunctionCall contained "[^{([:space:]<>\"]\+(\@=" nextgroup=juliaParBlock 154 155 exec 'syntax match juliaFunctionDef contained transparent "\%(\<\%(function\|macro\)\)\@'.s:d(8).'<=\s\+\zs' . s:idregex . '\%(\.' . s:idregex . '\)*\ze\s*\%((\|\send\>\|$\)" contains=juliaFunctionName' 156 exec 'syntax match juliaFunctionName contained "\%(\<\%(function\|macro\)\s\+\)\@'.s:d(20).'<=\%(' . s:idregex . '\.\)*\zs' . s:idregex . '"' 157 158 exec 'syntax match juliaStructR contained transparent "\%(\<\%(\%(mutable\s\+\)\?struct\|\%(abstract\|primitive\)\s\+type\)\s\+\)\@'.s:d(20).'<=\%(' . s:idregex . '\.\)*' . s:idregex . '\>\(\s*(\)\@!" contains=juliaType' 159 160 syntax match juliaKeyword display "\<\%(return\|local\|global\|const\)\>" 161 syntax match juliaInfixKeyword display "\%(=\s*\)\@<!\<\%(in\|isa\)\>\S\@!\%(\s*=\)\@!" 162 163 " The import/export/using/public keywords introduce a sort of special parsing 164 " environment with its own rules 165 exec 'syntax region juliaImportLine matchgroup=juliaKeyword excludenl start="\<\%(import\|using\|export\|public\)\>" skip="\%(\%(\<\%(import\|using\|export\|public\)\>\)\|^\)\@'.s:d(6).'<=$" end="$" end="\%([])}]\)\@=" contains=@juliaExpressions,juliaAsKeyword,@juliaContinuationItems,juliaMacroName' 166 syntax match juliaAsKeyword display contained "\<as\>" 167 168 syntax match juliaRepKeyword display "\<\%(break\|continue\)\>" 169 syntax region juliaConditionalBlock matchgroup=juliaConditional start="\<if\>" end="\<end\>" contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock fold 170 syntax region juliaConditionalEIBlock matchgroup=juliaConditional transparent contained start="\<elseif\>" end="\<\%(end\|else\|elseif\)\>"me=s-1 contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock 171 syntax region juliaConditionalEBlock matchgroup=juliaConditional transparent contained start="\<else\>" end="\<end\>"me=s-1 contains=@juliaExpressions 172 syntax region juliaWhileBlock matchgroup=juliaRepeat start="\<while\>" end="\<end\>" contains=@juliaExpressions fold 173 syntax region juliaForBlock matchgroup=juliaRepeat start="\<for\>" end="\<end\>" contains=@juliaExpressions,juliaOuter fold 174 syntax region juliaBeginBlock matchgroup=juliaBlKeyword start="\<begin\>" end="\<end\>" contains=@juliaExpressions fold 175 syntax region juliaFunctionBlock matchgroup=juliaBlKeyword start="\<function\>" end="\<end\>" contains=@juliaExpressions,juliaFunctionDef fold 176 syntax region juliaMacroBlock matchgroup=juliaBlKeyword start="\<macro\>" end="\<end\>" contains=@juliaExpressions,juliaFunctionDef fold 177 syntax region juliaQuoteBlock matchgroup=juliaBlKeyword start="\<quote\>" end="\<end\>" contains=@juliaExpressions fold 178 syntax region juliaStructBlock matchgroup=juliaBlKeyword start="\<struct\>" end="\<end\>" contains=@juliaExpressions,juliaStructR fold 179 syntax region juliaMutableStructBlock matchgroup=juliaBlKeyword start="\<mutable\s\+struct\>" end="\<end\>" contains=@juliaExpressions,juliaStructR fold 180 syntax region juliaLetBlock matchgroup=juliaBlKeyword start="\<let\>" end="\<end\>" contains=@juliaExpressions fold 181 syntax region juliaDoBlock matchgroup=juliaBlKeyword start="\<do\>" end="\<end\>" contains=@juliaExpressions fold 182 syntax region juliaModuleBlock matchgroup=juliaBlKeyword start="\<\%(bare\)\?module\>" end="\<end\>" contains=@juliaExpressions fold 183 syntax region juliaExceptionBlock matchgroup=juliaException start="\<try\>" end="\<end\>" contains=@juliaExpressions,juliaCatchBlock,juliaFinallyBlock fold 184 syntax region juliaCatchBlock matchgroup=juliaException transparent contained start="\<catch\>" end="\<end\>"me=s-1 contains=@juliaExpressions,juliaTryElseBlock,juliaFinallyBlock 185 syntax region juliaTryElseBlock matchgroup=juliaException transparent contained start="\<else\>" end="\<end\>"me=s-1 contains=@juliaExpressions,juliaFinallyBlock 186 syntax region juliaFinallyBlock matchgroup=juliaException transparent contained start="\<finally\>" end="\<end\>"me=s-1 contains=@juliaExpressions,juliaCatchBlock 187 syntax region juliaAbstractBlock matchgroup=juliaBlKeyword start="\<abstract\s\+type\>" end="\<end\>" fold contains=@juliaExpressions,juliaStructR 188 syntax region juliaPrimitiveBlock matchgroup=juliaBlKeyword start="\<primitive\s\+type\>" end="\<end\>" fold contains=@juliaExpressions,juliaStructR 189 190 exec 'syntax region juliaComprehensionFor matchgroup=juliaComprehensionFor transparent contained start="\%([^[:space:],;:({[]\_s*\)\@'.s:d(80).'<=\<for\>" end="\ze[]);]" contains=@juliaExpressions,juliaComprehensionIf,juliaComprehensionFor' 191 syntax match juliaComprehensionIf contained "\<if\>" 192 193 exec 'syntax match juliaOuter contained "\<outer\ze\s\+' . s:idregex . '\>"' 194 195 syntax match juliaRangeKeyword contained "\<\%(begin\|end\)\>" 196 197 syntax match juliaBaseTypeBasic display "\<\%(\%(N\|Named\)\?Tuple\|Symbol\|Function\|Union\%(All\)\?\|Type\%(Name\|Var\)\?\|Any\|ANY\|Vararg\|Ptr\|Exception\|Module\|Expr\|DataType\|\%(LineNumber\|Quote\)Node\|\%(Weak\|Global\)\?Ref\|Method\|Pair\|Val\|Nothing\|Some\|Missing\)\>" 198 syntax match juliaBaseTypeNum display "\<\%(U\?Int\%(8\|16\|32\|64\|128\)\?\|Float\%(16\|32\|64\)\|Complex\|Bool\|Char\|Number\|Signed\|Unsigned\|Integer\|AbstractFloat\|Real\|Rational\|\%(Abstract\)\?Irrational\|Enum\|BigInt\|BigFloat\|MathConst\|ComplexF\%(16\|32\|64\)\)\>" 199 syntax match juliaBaseTypeC display "\<\%(FileOffset\|C\%(u\?\%(char\|short\|int\|long\(long\)\?\|w\?string\)\|float\|double\|\%(ptrdiff\|s\?size\|wchar\|off\|u\?intmax\)_t\|void\)\)\>" 200 syntax match juliaBaseTypeError display "\<\%(\%(Bounds\|Divide\|Domain\|\%(Stack\)\?Overflow\|EOF\|Undef\%(Ref\|Var\)\|System\|Type\|Parse\|Argument\|Key\|Load\|Method\|Inexact\|OutOfMemory\|Init\|Assertion\|ReadOnlyMemory\|StringIndex\)Error\|\%(Interrupt\|Error\|ProcessExited\|Captured\|Composite\|InvalidState\|Missing\|\%(Process\|Task\)Failed\)Exception\|DimensionMismatch\|SegmentationFault\)\>" 201 syntax match juliaBaseTypeIter display "\<\%(EachLine\|Enumerate\|Cartesian\%(Index\|Range\)\|LinSpace\|CartesianIndices\)\>" 202 syntax match juliaBaseTypeString display "\<\%(DirectIndex\|Sub\|Rep\|Rev\|Abstract\|Substitution\)\?String\>" 203 syntax match juliaBaseTypeArray display "\<\%(\%(Sub\)\?Array\|\%(Abstract\|Dense\|Strided\)\?\%(Array\|Matrix\|Vec\%(tor\|OrMat\)\)\|SparseMatrixCSC\|\%(AbstractSparse\|Bit\|Shared\)\%(Array\|Vector\|Matrix\)\|\%\(D\|Bid\|\%(Sym\)\?Trid\)iagonal\|Hermitian\|Symmetric\|UniformScaling\|\%(Lower\|Upper\)Triangular\|\%(Sparse\|Row\)Vector\|VecElement\|Conj\%(Array\|Matrix\|Vector\)\|Index\%(Cartesian\|Linear\|Style\)\|PermutedDimsArray\|Broadcasted\|Adjoint\|Transpose\|LinearIndices\)\>" 204 syntax match juliaBaseTypeDict display "\<\%(WeakKey\|Id\|Abstract\)\?Dict\>" 205 syntax match juliaBaseTypeSet display "\<\%(\%(Abstract\|Bit\)\?Set\)\>" 206 syntax match juliaBaseTypeIO display "\<\%(IO\%(Stream\|Buffer\|Context\)\?\|RawFD\|StatStruct\|FileMonitor\|PollingFileWatcher\|Timer\|Base64\%(Decode\|Encode\)Pipe\|\%(UDP\|TCP\)Socket\|\%(Abstract\)\?Channel\|BufferStream\|ReentrantLock\|GenericIOBuffer\)\>" 207 syntax match juliaBaseTypeProcess display "\<\%(Pipe\|Cmd\|PipeBuffer\)\>" 208 syntax match juliaBaseTypeRange display "\<\%(Dims\|RangeIndex\|\%(Abstract\|Lin\|Ordinal\|Step\|\%(Abstract\)\?Unit\)Range\|Colon\|ExponentialBackOff\|StepRangeLen\)\>" 209 syntax match juliaBaseTypeRegex display "\<Regex\%(Match\)\?\>" 210 syntax match juliaBaseTypeFact display "\<\%(Factorization\|BunchKaufman\|\%(Cholesky\|QR\)\%(Pivoted\)\?\|\%(Generalized\)\?\%(Eigen\|SVD\|Schur\)\|Hessenberg\|LDLt\|LQ\|LU\)\>" 211 syntax match juliaBaseTypeSort display "\<\%(Insertion\|\(Partial\)\?Quick\|Merge\)Sort\>" 212 syntax match juliaBaseTypeRound display "\<Round\%(ingMode\|FromZero\|Down\|Nearest\%(Ties\%(Away\|Up\)\)\?\|ToZero\|Up\)\>" 213 syntax match juliaBaseTypeSpecial display "\<\%(LocalProcess\|ClusterManager\)\>" 214 syntax match juliaBaseTypeRandom display "\<\%(AbstractRNG\|MersenneTwister\|RandomDevice\)\>" 215 syntax match juliaBaseTypeDisplay display "\<\%(Text\(Display\)\?\|\%(Abstract\)\?Display\|MIME\|HTML\)\>" 216 syntax match juliaBaseTypeTime display "\<\%(Date\%(Time\)\?\|DateFormat\)\>" 217 syntax match juliaBaseTypeOther display "\<\%(RemoteRef\|Task\|Condition\|VersionNumber\|IPv[46]\|SerializationState\|WorkerConfig\|Future\|RemoteChannel\|IPAddr\|Stack\%(Trace\|Frame\)\|\(Caching\|Worker\)Pool\|AbstractSerializer\)\>" 218 219 syntax match juliaConstNum display "\%(\<\%(\%(NaN\|Inf\)\%(16\|32\|64\)\?\|pi\|π\)\>\)" 220 " Note: recognition of ℯ, which Vim does not consider a valid identifier, is 221 " complicated. We detect possible uses by just looking for the character (for 222 " performance) and then check that it's actually used by its own. 223 " (This also tries to detect preceding number constants; it does so in a crude 224 " way.) 225 syntax match juliaPossibleEuler "ℯ" contains=juliaEuler 226 exec 'syntax match juliaEuler contained "\%(\%(^\|[' . s:nonidS_chars . s:op_chars_wc . ']\)\%(.\?[0-9][.0-9eEf_]*\d\)\?\)\@'.s:d(80).'<=ℯ\ze[' . s:nonidS_chars . s:op_chars_wc . ']"' 227 syntax match juliaConstBool display "\<\%(true\|false\)\>" 228 syntax match juliaConstEnv display "\<\%(ARGS\|ENV\|ENDIAN_BOM\|LOAD_PATH\|VERSION\|PROGRAM_FILE\|DEPOT_PATH\)\>" 229 syntax match juliaConstIO display "\<\%(std\%(out\|in\|err\)\|devnull\)\>" 230 syntax match juliaConstC display "\<\%(C_NULL\)\>" 231 syntax match juliaConstGeneric display "\<\%(nothing\|Main\|undef\|missing\)\>" 232 233 syntax match juliaParamType contained "[^{([:space:]<>\"]\+\ze{" nextgroup=juliaCurBraBlock 234 235 syntax match juliaPossibleMacro transparent "@" contains=juliaMacroCall,juliaMacroCallP,juliaPrintfMacro,juliaDocMacro,juliaDocMacroPre 236 237 exec 'syntax match juliaMacro contained "@' . s:idregex . '\%(\.' . s:idregex . '\)*"' 238 syntax match juliaMacro contained "@[!.~$%^*/\\|<>+-]\ze[^0-9]" 239 exec 'syntax region juliaMacroCall contained transparent start="\(@' . s:idregex . '\%(\.' . s:idregex . '\)*\)\@=\1\%([^(]\|$\)" end="\ze\%([])};#]\|$\|\<for\>\|\<end\>\)" contains=@juliaExpressions,juliaMacro,juliaSymbolS,juliaQuotedParBlockS' 240 exec 'syntax region juliaMacroCall contained transparent start="\(@.\)\@=\1\%([^(]\|$\)" end="\ze\%([])};#]\|$\|\<for\>\|\<end\>\)" contains=@juliaExpressions,juliaMacro,juliaSymbolS,juliaQuotedParBlockS' 241 exec 'syntax region juliaMacroCallP contained transparent start="@' . s:idregex . '\%(\.' . s:idregex . '\)*(" end=")\@'.s:d(1).'<=" contains=juliaMacro,juliaParBlock' 242 exec 'syntax region juliaMacroCallP contained transparent start="@.(" end=")\@'.s:d(1).'<=" contains=juliaMacro,juliaParBlock' 243 244 exec 'syntax match juliaNumbers transparent "\%(^\|[' . s:nonidS_chars . s:op_chars_wc . ']\)\@'.s:d(1).'<=\d\|\.\d\|im\>" contains=juliaNumber,juliaFloat,juliaComplexUnit' 245 246 "integer regexes 247 let s:dec_regex = '\d\%(_\?\d\)*\%(\>\|im\>\|\ze\D\)' 248 let s:hex_regex = '0x\x\%(_\?\x\)*\%(\>\|im\>\|\ze\X\)' 249 let s:bin_regex = '0b[01]\%(_\?[01]\)*\%(\>\|im\>\|\ze[^01]\)' 250 let s:oct_regex = '0o\o\%(_\?\o\)*\%(\>\|im\>\|\ze\O\)' 251 252 let s:int_regex = '\%(' . s:hex_regex 253 \ . '\|' . s:bin_regex 254 \ . '\|' . s:oct_regex 255 \ . '\|' . s:dec_regex 256 \ . '\)' 257 258 "floating point regexes 259 " starting with a dot, optional exponent 260 let s:float_regex1 = '\.\d\%(_\?\d\)*\%([eEf][-+]\?\d\+\)\?\%(\>\|im\>\|\ze\D\)' 261 " with dot, optional exponent 262 let s:float_regex2 = '\d\%(_\?\d\)*\.\%(\d\%(_\?\d\)*\)\?\%([eEf][-+]\?\d\+\)\?\%(\>\|im\>\|\ze\D\)' 263 " without dot, with exponent 264 let s:float_regex3 = '\d\%(_\?\d\)*[eEf][-+]\?\d\+\%(\>\|im\>\|\ze\D\)' 265 266 "hex floating point numbers 267 " starting with a dot 268 let s:hexfloat_regex1 = '0x\.\%\(\x\%(_\?\x\)*\)\?[pP][-+]\?\d\+\%(\>\|im\>\|\ze\X\)' 269 " starting with a digit 270 let s:hexfloat_regex2 = '0x\x\%(_\?\x\)*\%\(\.\%\(\x\%(_\?\x\)*\)\?\)\?[pP][-+]\?\d\+\%(\>\|im\>\|\ze\X\)' 271 272 let s:float_regex = '\%(' . s:float_regex3 273 \ . '\|' . s:float_regex2 274 \ . '\|' . s:float_regex1 275 \ . '\|' . s:hexfloat_regex2 276 \ . '\|' . s:hexfloat_regex1 277 \ . '\)' 278 279 exec 'syntax match juliaNumber contained "' . s:int_regex . '" contains=juliaComplexUnit' 280 exec 'syntax match juliaFloat contained "' . s:float_regex . '" contains=juliaComplexUnit' 281 syntax match juliaComplexUnit display contained "\<im\>" 282 283 syntax match juliaRangeOperator display ":" 284 exec 'syntax match juliaOperator "' . s:operators . '"' 285 286 exec 'syntax region juliaTernaryRegion matchgroup=juliaTernaryOperator start="\s\zs?\ze\s" skip="\%(:\(:\|[^:[:space:]'."'".'"({[]\+\s*\ze:\)\|\%(?\s*\)\@'.s:d(6).'<=:(\)" end=":" contains=@juliaExpressions,juliaErrorSemicol' 287 288 let s:interp_dollar = '\([' . s:nonidS_chars . s:op_chars_wc . '!]\|^\)\@'.s:d(1).'<=\$' 289 290 exec 'syntax match juliaDollarVar display contained "' . s:interp_dollar . s:idregex . '"' 291 exec 'syntax region juliaDollarPar matchgroup=juliaDollarVar contained start="' .s:interp_dollar . '(" end=")" contains=@juliaExpressions' 292 exec 'syntax region juliaDollarSqBra matchgroup=juliaDollarVar contained start="' .s:interp_dollar . '\[" end="\]" contains=@juliaExpressions,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS' 293 294 syntax match juliaChar "'\\\?.'" contains=juliaSpecialChar 295 syntax match juliaChar display "'\\\o\{3\}'" contains=juliaOctalEscapeChar 296 syntax match juliaChar display "'\\x\x\{2\}'" contains=juliaHexEscapeChar 297 syntax match juliaChar display "'\\u\x\{1,4\}'" contains=juliaUniCharSmall 298 syntax match juliaChar display "'\\U\x\{1,8\}'" contains=juliaUniCharLarge 299 300 exec 'syntax match juliaCTransOperator "[[:space:]}' . s:nonid_chars . s:op_chars_wc . '!]\@'.s:d(1).'<!\.\?' . "'" . 'ᵀ\?"' 301 302 " TODO: some of these might be specialized; the rest could be just left to the 303 " generic juliaStringPrefixed fallback 304 syntax region juliaString matchgroup=juliaStringDelim start=+\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckStrings 305 syntax region juliaStringPrefixed contained matchgroup=juliaStringDelim start=+[^{([:space:]<>"]\+\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialCharsRaw 306 syntax region juliabString matchgroup=juliaStringDelim start=+\<b\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialChars 307 syntax region juliasString matchgroup=juliaStringDelim start=+\<s\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialChars 308 309 syntax region juliaDocString matchgroup=juliaDocStringDelim fold start=+^"""+ skip=+\%(\\\\\)*\\"+ end=+"""+ contains=@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckDocStrings 310 311 exec 'syntax region juliaPrintfMacro contained transparent start="@s\?printf(" end=")\@'.s:d(1).'<=" contains=juliaMacro,juliaPrintfParBlock' 312 syntax region juliaPrintfMacro contained transparent start="@s\?printf\s\+" end="\ze\%([])};#]\|$\|\<for\>\)" contains=@juliaExprsPrintf,juliaMacro,juliaSymbolS,juliaQuotedParBlockS 313 syntax region juliaPrintfParBlock contained matchgroup=juliaParDelim start="(" end=")" contains=@juliaExprsPrintf 314 syntax region juliaPrintfString contained matchgroup=juliaStringDelim start=+"+ skip=+\%(\\\\\)*\\"+ end=+"+ contains=@juliaSpecialChars,@juliaPrintfChars 315 316 exec 'syntax region juliaDocMacroPre contained transparent start=+@doc\s\+\%(' . s:idregex . '\%(\.' . s:idregex . '\)*\)\z("\%(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\(\z1\)\@'.s:d(3).'<=+ contains=juliaMacro,juliaDocStringMRaw' 317 exec 'syntax region juliaDocMacro contained transparent start=+@doc\s\+\z("\%(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\(\z1\)\@'.s:d(3).'<=+ contains=juliaMacro,juliaDocStringM' 318 syntax region juliaDocStringMRaw contained fold matchgroup=juliaDocStringDelim fold start=+\z\("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpellcheckDocStrings 319 syntax region juliaDocStringM contained fold matchgroup=juliaDocStringDelim fold start=+\z\("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckDocStrings 320 321 syntax region juliaShellString matchgroup=juliaStringDelim start=+`+ skip=+\%(\\\\\)*\\`+ end=+`+ contains=@juliaStringVars,juliaSpecialChar 322 323 syntax cluster juliaStringVars contains=juliaStringVarsPar,juliaStringVarsSqBra,juliaStringVarsCurBra,juliaStringVarsPla 324 syntax region juliaStringVarsPar contained matchgroup=juliaStringVarDelim start="$(" end=")" contains=@juliaExpressions 325 syntax region juliaStringVarsSqBra contained matchgroup=juliaStringVarDelim start="$\[" end="\]" contains=@juliaExpressions,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS 326 syntax region juliaStringVarsCurBra contained matchgroup=juliaStringVarDelim start="${" end="}" contains=@juliaExpressions 327 exec 'syntax match juliaStringVarsPla contained "\$' . s:idregex . '"' 328 329 " TODO improve RegEx 330 syntax region juliaRegEx matchgroup=juliaStringDelim start=+\<r\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1[imsx]*+ 331 332 syntax cluster juliaSpecialChars contains=juliaSpecialChar,juliaDoubleBackslash,juliaEscapedQuote,juliaOctalEscapeChar,juliaHexEscapeChar,juliaUniCharSmall,juliaUniCharLarge 333 syntax match juliaSpecialChar display contained "\\." 334 syntax match juliaOctalEscapeChar display contained "\\\o\{3\}" 335 syntax match juliaHexEscapeChar display contained "\\x\x\{2\}" 336 syntax match juliaUniCharSmall display contained "\\u\x\{1,4\}" 337 syntax match juliaUniCharLarge display contained "\\U\x\{1,8\}" 338 syntax cluster juliaSpecialCharsRaw contains=juliaDoubleBackslash,juliaEscapedQuote 339 syntax match juliaDoubleBackslash contained "\\\\" 340 syntax match juliaEscapedQuote contained "\\\"" 341 342 syntax cluster juliaPrintfChars contains=juliaErrorPrintfFmt,juliaPrintfFmt 343 syntax match juliaErrorPrintfFmt display contained "\\\?%." 344 syntax match juliaPrintfFmt display contained "%\%(\d\+\$\)\=[-+' #0]*\%(\d*\|\*\|\*\d\+\$\)\%(\.\%(\d*\|\*\|\*\d\+\$\)\)\=\%([hlLjqzt]\|ll\|hh\)\=[aAbdiuoxXDOUfFeEgGcCsSpn]" 345 syntax match juliaPrintfFmt display contained "%%" 346 syntax match juliaPrintfFmt display contained "\\%\%(\d\+\$\)\=[-+' #0]*\%(\d*\|\*\|\*\d\+\$\)\%(\.\%(\d*\|\*\|\*\d\+\$\)\)\=\%([hlLjqzt]\|ll\|hh\)\=[aAbdiuoxXDOUfFeEgGcCsSpn]"hs=s+1 347 syntax match juliaPrintfFmt display contained "\\%%"hs=s+1 348 349 " this is used to restrict the search for Symbols to when colons appear at all 350 " (for performance reasons) 351 syntax match juliaPossibleSymbol transparent ":\ze[^:]" contains=juliaSymbol,juliaQuotedParBlock,juliaQuotedQMarkPar,juliaColon 352 353 let s:quotable = '\%(' . s:idregex . '\|' . s:operators . '\|[?.]\|' . s:float_regex . '\|' . s:int_regex . '\)' 354 let s:quoting_colon = '\%(\%(^\s*\|\s\{6,\}\|[' . s:nonid_chars . s:op_chars_wc . ']\s*\)\@'.s:d(6).'<=\|\%(\<\%(return\|if\|else\%(if\)\?\|while\|try\|begin\)\s\+\)\@'.s:d(9).'<=\)\zs:' 355 let s:quoting_colonS = '\s\@'.s:d(1).'<=:' 356 357 " note: juliaSymbolS only works within whitespace-sensitive contexts, 358 " such as in macro calls without parentheses, or within square brackets. 359 " It is used to override the recognition of expressions like `a :b` as 360 " ranges rather than symbols in those contexts. 361 " (Note that such `a :b` expressions only allows at most 5 spaces between 362 " the identifier and the colon anyway.) 363 364 exec 'syntax match juliaSymbol contained "' . s:quoting_colon . s:quotable . '"' 365 exec 'syntax match juliaSymbolS contained "' . s:quoting_colonS . s:quotable . '"' 366 367 " same as above for quoted expressions such as :(expr) 368 exec 'syntax region juliaQuotedParBlock matchgroup=juliaQParDelim start="' . s:quoting_colon . '(" end=")" contains=@juliaExpressions' 369 exec 'syntax match juliaQuotedQMarkPar "' . s:quoting_colon . '(\s*?\s*)" contains=juliaQuotedQMark' 370 exec 'syntax region juliaQuotedParBlockS matchgroup=juliaQParDelim contained start="' . s:quoting_colonS . '(" end=")" contains=@juliaExpressions' 371 372 373 syntax match juliaTypeOperatorR1 contained "[^{([:space:]<>\"]\+\%(\s*[<>]:\)\@=" 374 375 " force precedence over Symbols 376 syntax match juliaTypeOperator contained "[<>:]:" 377 exec 'syntax match juliaTypeOperatorR2 transparent "[<>:]:\s*\%(' . s:idregex . '\.\)*' . s:idregex . '" contains=juliaTypeOperator,juliaType,juliaDottedT,@juliaExpressions nextgroup=juliaTypeOperator' 378 syntax match juliaIsaKeyword contained "\<isa\>" 379 exec 'syntax match juliaTypeOperatorR3 transparent "\<isa\s\+\%(' . s:idregex . '\.\)*' . s:idregex . '" contains=juliaIsaKeyword,juliaType,juliaDottedT,@juliaExpressions nextgroup=juliaIsaKeyword' 380 381 syntax match juliaWhereKeyword "\<where\>" 382 exec 'syntax match juliaWhereR transparent "\<where\s\+' . s:idregex . '" contains=juliaWhereKeyword,juliaType,juliaDottedT,juliaIdSymbol' 383 384 syntax region juliaCommentL matchgroup=juliaCommentDelim excludenl start="#\ze\%([^=]\|$\)" end="$" contains=juliaTodo,@juliaSpellcheckComments 385 syntax region juliaCommentM matchgroup=juliaCommentDelim fold start="#=\ze\%([^#]\|$\)" end="=#" contains=juliaTodo,juliaCommentM,@juliaSpellcheckComments 386 syntax keyword juliaTodo contained TODO FIXME XXX 387 388 " detect an end-of-line with only whitespace or comments before it 389 let s:eol = '\s*\%(\%(\%(#=\%(=#\@!\|[^=]\|\n\)\{-}=#\)\s*\)\+\)\?\%(#=\@!.*\)\?\n' 390 391 " a trailing comma, or colon, or an empty line in an import/using/export/public 392 " multi-line command. Used to recognize the as keyword, and for indentation 393 " (this needs to take precedence over normal commas and colons, and comments) 394 syntax cluster juliaContinuationItems contains=juliaContinuationComma,juliaContinuationColon,juliaContinuationNone 395 exec 'syntax region juliaContinuationComma matchgroup=juliaComma contained start=",\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems' 396 exec 'syntax region juliaContinuationColon matchgroup=juliaColon contained start=":\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems' 397 exec 'syntax region juliaContinuationNone matchgroup=NONE contained start="\%(\<\%(import\|using\|export\|public\)\>\|^\)\@'.s:d(6).'<=\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems,juliaAsKeyword' 398 exec 'syntax match juliaMacroName contained "@' . s:idregex . '\%(\.' . s:idregex . '\)*"' 399 400 " the following are disabled by default, but 401 " can be enabled by entering e.g. 402 " :hi link juliaParDelim Delimiter 403 hi def link juliaParDelim juliaNone 404 hi def link juliaSemicolon juliaNone 405 hi def link juliaComma juliaNone 406 hi def link juliaFunctionCall juliaNone 407 408 hi def link juliaColon juliaOperator 409 410 hi def link juliaFunctionName juliaFunction 411 hi def link juliaFunctionName1 juliaFunction 412 hi def link juliaMacroName juliaMacro 413 414 415 hi def link juliaKeyword Keyword 416 hi def link juliaWhereKeyword Keyword 417 hi def link juliaInfixKeyword Keyword 418 hi def link juliaIsaKeyword Keyword 419 hi def link juliaAsKeyword Keyword 420 hi def link juliaRepKeyword Keyword 421 hi def link juliaBlKeyword Keyword 422 hi def link juliaConditional Conditional 423 hi def link juliaRepeat Repeat 424 hi def link juliaException Exception 425 hi def link juliaOuter Keyword 426 hi def link juliaBaseTypeBasic Type 427 hi def link juliaBaseTypeNum Type 428 hi def link juliaBaseTypeC Type 429 hi def link juliaBaseTypeError Type 430 hi def link juliaBaseTypeIter Type 431 hi def link juliaBaseTypeString Type 432 hi def link juliaBaseTypeArray Type 433 hi def link juliaBaseTypeDict Type 434 hi def link juliaBaseTypeSet Type 435 hi def link juliaBaseTypeIO Type 436 hi def link juliaBaseTypeProcess Type 437 hi def link juliaBaseTypeRange Type 438 hi def link juliaBaseTypeRegex Type 439 hi def link juliaBaseTypeFact Type 440 hi def link juliaBaseTypeSort Type 441 hi def link juliaBaseTypeRound Type 442 hi def link juliaBaseTypeSpecial Type 443 hi def link juliaBaseTypeRandom Type 444 hi def link juliaBaseTypeDisplay Type 445 hi def link juliaBaseTypeTime Type 446 hi def link juliaBaseTypeOther Type 447 448 hi def link juliaType Type 449 hi def link juliaParamType Type 450 hi def link juliaTypeOperatorR1 Type 451 452 " NOTE: deprecated constants are not highlighted as such. For once, 453 " one can still legitimately use them by importing Base.MathConstants. 454 " Plus, one-letter variables like `e` and `γ` can be used with other 455 " meanings. 456 hi def link juliaConstNum Constant 457 hi def link juliaEuler Constant 458 459 hi def link juliaConstEnv Constant 460 hi def link juliaConstC Constant 461 hi def link juliaConstLimits Constant 462 hi def link juliaConstGeneric Constant 463 hi def link juliaRangeKeyword Constant 464 hi def link juliaConstBool Boolean 465 hi def link juliaConstIO Boolean 466 467 hi def link juliaComprehensionFor Keyword 468 hi def link juliaComprehensionIf Keyword 469 470 hi def link juliaDollarVar Identifier 471 472 hi def link juliaFunction Function 473 hi def link juliaMacro Macro 474 hi def link juliaSymbol Identifier 475 hi def link juliaSymbolS Identifier 476 hi def link juliaQParDelim Identifier 477 hi def link juliaQuotedQMarkPar Identifier 478 hi def link juliaQuotedQMark juliaOperatorHL 479 480 hi def link juliaNumber Number 481 hi def link juliaFloat Float 482 hi def link juliaComplexUnit Constant 483 484 hi def link juliaChar Character 485 486 hi def link juliaString String 487 hi def link juliaStringPrefixed juliaString 488 hi def link juliabString juliaString 489 hi def link juliasString juliaString 490 hi def link juliavString juliaString 491 hi def link juliarString juliaString 492 hi def link juliaipString juliaString 493 hi def link juliabigString juliaString 494 hi def link juliaMIMEString juliaString 495 hi def link juliarawString juliaString 496 hi def link juliatestString juliaString 497 hi def link juliahtmlString juliaString 498 hi def link juliaint128String juliaString 499 hi def link juliaPrintfString juliaString 500 hi def link juliaShellString juliaString 501 hi def link juliaDocString juliaString 502 hi def link juliaDocStringM juliaDocString 503 hi def link juliaDocStringMRaw juliaDocString 504 hi def link juliaStringDelim juliaString 505 hi def link juliaDocStringDelim juliaDocString 506 hi def link juliaStringVarsPla Identifier 507 hi def link juliaStringVarDelim Identifier 508 509 hi def link juliaRegEx String 510 511 hi def link juliaSpecialChar SpecialChar 512 hi def link juliaOctalEscapeChar SpecialChar 513 hi def link juliaHexEscapeChar SpecialChar 514 hi def link juliaUniCharSmall SpecialChar 515 hi def link juliaUniCharLarge SpecialChar 516 hi def link juliaDoubleBackslash SpecialChar 517 hi def link juliaEscapedQuote SpecialChar 518 519 hi def link juliaPrintfFmt SpecialChar 520 521 if s:julia_highlight_operators 522 hi! def link juliaOperatorHL Operator 523 else 524 hi! def link juliaOperatorHL juliaNone 525 endif 526 hi def link juliaOperator juliaOperatorHL 527 hi def link juliaRangeOperator juliaOperatorHL 528 hi def link juliaCTransOperator juliaOperatorHL 529 hi def link juliaTernaryOperator juliaOperatorHL 530 hi def link juliaTypeOperator juliaOperatorHL 531 532 hi def link juliaCommentL Comment 533 hi def link juliaCommentM Comment 534 hi def link juliaCommentDelim Comment 535 hi def link juliaTodo Todo 536 537 hi def link juliaErrorPar juliaError 538 hi def link juliaErrorEnd juliaError 539 hi def link juliaErrorElse juliaError 540 hi def link juliaErrorCatch juliaError 541 hi def link juliaErrorFinally juliaError 542 hi def link juliaErrorSemicol juliaError 543 hi def link juliaErrorPrintfFmt juliaError 544 545 hi def link juliaError Error 546 547 syntax sync fromstart 548 549 let b:current_syntax = "julia" 550 551 let &cpo = s:cpo_save 552 unlet s:cpo_save