codekingpro/portable-devtools
114k
1" Vim syntax file2" Language: julia3" Maintainer: Carlo Baldassi <carlobaldassi@gmail.com>4" Homepage: https://github.com/JuliaEditorSupport/julia-vim5" Last Change: 2021 Aug 046" 2025 Dec 08 by Vim Project (update syntax script from upstream #18894)7 8if version < 6009 syntax clear10elseif exists("b:current_syntax")11 finish12endif13 14let s:cpo_save = &cpo15set cpo&vim16 17if version < 70418 " this is used to disable regex syntax like `\@3<='19 " on older vim versions20 function! s:d(x)21 return ''22 endfunction23else24 function! s:d(x)25 return string(a:x)26 endfunction27endif28 29scriptencoding utf-830 31let s:julia_spellcheck_strings = get(g:, "julia_spellcheck_strings", 0)32let s:julia_spellcheck_docstrings = get(g:, "julia_spellcheck_docstrings", 1)33let s:julia_spellcheck_comments = get(g:, "julia_spellcheck_comments", 1)34 35let 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 check40" 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-case43" basis.44let 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 list49let s:nonidS_chars = '[:space:])\U5D}' . s:nonid_chars50 51 52" List of all valid operator chars up to \UFF (NOTE: they must all be included53" 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: '%&*+-/<=>\\^|~¬±×÷'56let 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 \UFF59" Written with ranges for performance reasons60" The list contains the following characters: '…⁝⅋←↑→↓↔↚↛↜↝↞↠↢↣↤↦↩↪↫↬↮↶↷↺↻↼↽⇀⇁⇄⇆⇇⇉⇋⇌⇍⇎⇏⇐⇒⇔⇚⇛⇜⇝⇠⇢⇴⇵⇶⇷⇸⇹⇺⇻⇼⇽⇾⇿∈∉∊∋∌∍∓∔∗∘∙√∛∜∝∤∥∦∧∨∩∪∷∸∺∻∽∾≀≁≂≃≄≅≆≇≈≉≊≋≌≍≎≏≐≑≒≓≔≕≖≗≘≙≚≛≜≝≞≟≠≡≢≣≤≥≦≧≨≩≪≫≬≭≮≯≰≱≲≳≴≵≶≷≸≹≺≻≼≽≾≿⊀⊁⊂⊃⊄⊅⊆⊇⊈⊉⊊⊋⊍⊎⊏⊐⊑⊒⊓⊔⊕⊖⊗⊘⊙⊚⊛⊜⊞⊟⊠⊡⊢⊣⊩⊬⊮⊰⊱⊲⊳⊴⊵⊶⊷⊻⊼⊽⋄⋅⋆⋇⋉⋊⋋⋌⋍⋎⋏⋐⋑⋒⋓⋕⋖⋗⋘⋙⋚⋛⋜⋝⋞⋟⋠⋡⋢⋣⋤⋥⋦⋧⋨⋩⋪⋫⋬⋭⋮⋯⋰⋱⋲⋳⋴⋵⋶⋷⋸⋹⋺⋻⋼⋽⋾⋿⌿▷⟂⟈⟉⟑⟒⟕⟖⟗⟰⟱⟵⟶⟷⟹⟺⟻⟼⟽⟾⟿⤀⤁⤂⤃⤄⤅⤆⤇⤈⤉⤊⤋⤌⤍⤎⤏⤐⤑⤒⤓⤔⤕⤖⤗⤘⤝⤞⤟⤠⥄⥅⥆⥇⥈⥉⥊⥋⥌⥍⥎⥏⥐⥑⥒⥓⥔⥕⥖⥗⥘⥙⥚⥛⥜⥝⥞⥟⥠⥡⥢⥣⥤⥥⥦⥧⥨⥩⥪⥫⥬⥭⥮⥯⥰⦷⦸⦼⦾⦿⧀⧁⧡⧣⧤⧥⧴⧶⧷⧺⧻⨇⨈⨝⨟⨢⨣⨤⨥⨦⨧⨨⨩⨪⨫⨬⨭⨮⨰⨱⨲⨳⨴⨵⨶⨷⨸⨹⨺⨻⨼⨽⩀⩁⩂⩃⩄⩅⩊⩋⩌⩍⩎⩏⩐⩑⩒⩓⩔⩕⩖⩗⩘⩚⩛⩜⩝⩞⩟⩠⩡⩢⩣⩦⩧⩪⩫⩬⩭⩮⩯⩰⩱⩲⩳⩴⩵⩶⩷⩸⩹⩺⩻⩼⩽⩾⩿⪀⪁⪂⪃⪄⪅⪆⪇⪈⪉⪊⪋⪌⪍⪎⪏⪐⪑⪒⪓⪔⪕⪖⪗⪘⪙⪚⪛⪜⪝⪞⪟⪠⪡⪢⪣⪤⪥⪦⪧⪨⪩⪪⪫⪬⪭⪮⪯⪰⪱⪲⪳⪴⪵⪶⪷⪸⪹⪺⪻⪼⪽⪾⪿⫀⫁⫂⫃⫄⫅⫆⫇⫈⫉⫊⫋⫌⫍⫎⫏⫐⫑⫒⫓⫔⫕⫖⫗⫘⫙⫛⫷⫸⫹⫺⬰⬱⬲⬳⬴⬵⬶⬷⬸⬹⬺⬻⬼⬽⬾⬿⭀⭁⭂⭃⭄⭇⭈⭉⭊⭋⭌←↑→↓'61let 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't65" bother checking. (If a UTF8 operator is used, it will take precedence anyway.)66let 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. Above68" \UBF we check for operators since we need to stop the identifier if one69" appears. We don't check for invalid characters though.70let 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 less73let s:idregex = '\%(' . s:id_charsH . s:id_charsW . '*\)'74 75" Full operators regex76let s:operators = '\%(' . '\.\%([-+*/^÷%|&⊻]\|//\|\\\|>>\|>>>\?\)\?='77 \ . '\|' . '[!:<>]=\|||\|&&\||>\|<|\|[<>:]:\|<<\|>>>\?\|//\|[-=]>\|\.\.\.\?'78 \ . '\|' . '\.!' . '\|'.s:id_charsW.'\@'.s:d(1).'<!!'79 \ . '\|' . '\.\?[' . s:op_chars . s:op_chars_wc . ']'80 \ . '\)'81 82 83syn case match84 85syntax cluster juliaExpressions contains=@juliaParItems,@juliaStringItems,@juliaKeywordItems,@juliaBlocksItems,@juliaTypesItems,@juliaConstItems,@juliaMacroItems,@juliaSymbolItems,@juliaOperatorItems,@juliaNumberItems,@juliaCommentItems,@juliaErrorItems,@juliaSyntaxRegions86syntax cluster juliaExprsPrintf contains=@juliaExpressions,@juliaPrintfItems87syntax cluster juliaExprsNodot contains=@juliaParItems,@juliaStringItems,@juliaMacroItems,@juliaSymbolItems,@juliaOperatorItems,@juliaCommentItems,juliaIdSymbol88 89syntax cluster juliaParItems contains=juliaParBlock,juliaSqBraIdxBlock,juliaSqBraBlock,juliaCurBraBlock,juliaQuotedParBlock,juliaQuotedQMarkPar90syntax cluster juliaKeywordItems contains=juliaKeyword,juliaWhereKeyword,juliaImportLine,juliaInfixKeyword,juliaRepKeyword91syntax cluster juliaBlocksItems contains=juliaConditionalBlock,juliaWhileBlock,juliaForBlock,juliaBeginBlock,juliaFunctionBlock,juliaMacroBlock,juliaQuoteBlock,juliaExceptionBlock,juliaLetBlock,juliaDoBlock,juliaModuleBlock,juliaStructBlock,juliaMutableStructBlock,juliaAbstractBlock,juliaPrimitiveBlock92syntax cluster juliaTypesItems contains=juliaBaseTypeBasic,juliaBaseTypeNum,juliaBaseTypeC,juliaBaseTypeError,juliaBaseTypeIter,juliaBaseTypeString,juliaBaseTypeArray,juliaBaseTypeDict,juliaBaseTypeSet,juliaBaseTypeIO,juliaBaseTypeProcess,juliaBaseTypeRange,juliaBaseTypeRegex,juliaBaseTypeFact,juliaBaseTypeSort,juliaBaseTypeRound,juliaBaseTypeSpecial,juliaBaseTypeRandom,juliaBaseTypeDisplay,juliaBaseTypeTime,juliaBaseTypeOther93 94syntax cluster juliaConstItems contains=juliaConstNum,juliaConstBool,juliaConstEnv,juliaConstC,juliaConstGeneric,juliaConstIO,juliaPossibleEuler95 96syntax cluster juliaMacroItems contains=juliaPossibleMacro,juliaDollarVar,juliaDollarPar,juliaDollarSqBra97syntax cluster juliaSymbolItems contains=juliaPossibleSymbol98syntax cluster juliaNumberItems contains=juliaNumbers99syntax cluster juliaStringItems contains=juliaChar,juliaString,juliabString,juliasString,juliaShellString,juliaDocString,juliaRegEx100syntax cluster juliaPrintfItems contains=juliaPrintfParBlock,juliaPrintfString101syntax cluster juliaOperatorItems contains=juliaOperator,juliaRangeOperator,juliaCTransOperator,juliaTernaryRegion,juliaColon,juliaSemicolon,juliaComma102syntax cluster juliaCommentItems contains=juliaCommentL,juliaCommentM103syntax cluster juliaErrorItems contains=juliaErrorPar,juliaErrorEnd,juliaErrorElse,juliaErrorCatch,juliaErrorFinally104 105syntax cluster juliaSyntaxRegions contains=juliaIdSymbol,juliaTypeOperatorR2,juliaTypeOperatorR3,juliaWhereR,juliaDotted106 107syntax cluster juliaSpellcheckStrings contains=@spell108syntax cluster juliaSpellcheckDocStrings contains=@spell109syntax cluster juliaSpellcheckComments contains=@spell110 111if !s:julia_spellcheck_docstrings112 syntax cluster juliaSpellcheckDocStrings remove=@spell113endif114if !s:julia_spellcheck_strings115 syntax cluster juliaSpellcheckStrings remove=@spell116endif117if !s:julia_spellcheck_comments118 syntax cluster juliaSpellcheckComments remove=@spell119endif120 121syntax match juliaSemicolon display ";"122syntax match juliaComma display ","123syntax match juliaColon display ":"124 125" A dot can introduce a sort of 'environment' such that words after it are not126" recognized as keywords. This has low precedence so that it can be overridden127" by operators128syntax match juliaDotted transparent "\.\s*[^])}.]" contains=@juliaExprsNodot129syntax match juliaDottedT contained transparent "\.\s*[^])}.]" contains=@juliaExprsNodot,juliaType130 131syntax match juliaErrorPar display "[])}]"132syntax match juliaErrorEnd display "\<end\>"133syntax match juliaErrorElse display "\<\%(else\|elseif\)\>"134syntax match juliaErrorCatch display "\<catch\>"135syntax match juliaErrorFinally display "\<finally\>"136syntax match juliaErrorSemicol display contained ";"137 138syntax region juliaParBlock matchgroup=juliaParDelim start="(" end=")" contains=@juliaExpressions,juliaComprehensionFor139syntax region juliaParBlockInRange matchgroup=juliaParDelim contained start="(" end=")" contains=@juliaExpressions,juliaParBlockInRange,juliaRangeKeyword,juliaComprehensionFor140syntax region juliaSqBraIdxBlock matchgroup=juliaParDelim start="\[" end="\]" contains=@juliaExpressions,juliaParBlockInRange,juliaRangeKeyword,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS141exec 'syntax region juliaSqBraBlock matchgroup=juliaParDelim start="\%(^\|\s\|' . s:operators . '\)\@'.s:d(3).'<=\[" end="\]" contains=@juliaExpressions,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS,juliaQuotedQMarkParS'142syntax region juliaCurBraBlock matchgroup=juliaParDelim start="{" end="}" contains=juliaType,juliaDottedT,@juliaExpressions143 144exec 'syntax match juliaType contained "\%(' . s:idregex . '\.\)*\zs' . s:idregex . '"'145 146" This is a generic identifier followed by some symbol, either a type147" operator (<: or >:), or an open parenthesis, or an open curly bracket.148" It's used to recognize one of the contained regions looking for identifiers149" only once. Once recognized, those regions no longer need to use the150" expensive s:idregex.151exec 'syntax match juliaIdSymbol transparent "' . s:idregex . '\%(\s*[<>]:\|\.\?(\|{\|\"\)\@=" contains=juliaFunctionCall,juliaParamType,juliaStringPrefixed,juliaTypeOperatorR1'152 153syntax match juliaFunctionCall contained "[^{([:space:]<>\"]\+(\@=" nextgroup=juliaParBlock154 155exec 'syntax match juliaFunctionDef contained transparent "\%(\<\%(function\|macro\)\)\@'.s:d(8).'<=\s\+\zs' . s:idregex . '\%(\.' . s:idregex . '\)*\ze\s*\%((\|\send\>\|$\)" contains=juliaFunctionName'156exec 'syntax match juliaFunctionName contained "\%(\<\%(function\|macro\)\s\+\)\@'.s:d(20).'<=\%(' . s:idregex . '\.\)*\zs' . s:idregex . '"'157 158exec 'syntax match juliaStructR contained transparent "\%(\<\%(\%(mutable\s\+\)\?struct\|\%(abstract\|primitive\)\s\+type\)\s\+\)\@'.s:d(20).'<=\%(' . s:idregex . '\.\)*' . s:idregex . '\>\(\s*(\)\@!" contains=juliaType'159 160syntax match juliaKeyword display "\<\%(return\|local\|global\|const\)\>"161syntax match juliaInfixKeyword display "\%(=\s*\)\@<!\<\%(in\|isa\)\>\S\@!\%(\s*=\)\@!"162 163" The import/export/using/public keywords introduce a sort of special parsing164" environment with its own rules165exec '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'166syntax match juliaAsKeyword display contained "\<as\>"167 168syntax match juliaRepKeyword display "\<\%(break\|continue\)\>"169syntax region juliaConditionalBlock matchgroup=juliaConditional start="\<if\>" end="\<end\>" contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock fold170syntax region juliaConditionalEIBlock matchgroup=juliaConditional transparent contained start="\<elseif\>" end="\<\%(end\|else\|elseif\)\>"me=s-1 contains=@juliaExpressions,juliaConditionalEIBlock,juliaConditionalEBlock171syntax region juliaConditionalEBlock matchgroup=juliaConditional transparent contained start="\<else\>" end="\<end\>"me=s-1 contains=@juliaExpressions172syntax region juliaWhileBlock matchgroup=juliaRepeat start="\<while\>" end="\<end\>" contains=@juliaExpressions fold173syntax region juliaForBlock matchgroup=juliaRepeat start="\<for\>" end="\<end\>" contains=@juliaExpressions,juliaOuter fold174syntax region juliaBeginBlock matchgroup=juliaBlKeyword start="\<begin\>" end="\<end\>" contains=@juliaExpressions fold175syntax region juliaFunctionBlock matchgroup=juliaBlKeyword start="\<function\>" end="\<end\>" contains=@juliaExpressions,juliaFunctionDef fold176syntax region juliaMacroBlock matchgroup=juliaBlKeyword start="\<macro\>" end="\<end\>" contains=@juliaExpressions,juliaFunctionDef fold177syntax region juliaQuoteBlock matchgroup=juliaBlKeyword start="\<quote\>" end="\<end\>" contains=@juliaExpressions fold178syntax region juliaStructBlock matchgroup=juliaBlKeyword start="\<struct\>" end="\<end\>" contains=@juliaExpressions,juliaStructR fold179syntax region juliaMutableStructBlock matchgroup=juliaBlKeyword start="\<mutable\s\+struct\>" end="\<end\>" contains=@juliaExpressions,juliaStructR fold180syntax region juliaLetBlock matchgroup=juliaBlKeyword start="\<let\>" end="\<end\>" contains=@juliaExpressions fold181syntax region juliaDoBlock matchgroup=juliaBlKeyword start="\<do\>" end="\<end\>" contains=@juliaExpressions fold182syntax region juliaModuleBlock matchgroup=juliaBlKeyword start="\<\%(bare\)\?module\>" end="\<end\>" contains=@juliaExpressions fold183syntax region juliaExceptionBlock matchgroup=juliaException start="\<try\>" end="\<end\>" contains=@juliaExpressions,juliaCatchBlock,juliaFinallyBlock fold184syntax region juliaCatchBlock matchgroup=juliaException transparent contained start="\<catch\>" end="\<end\>"me=s-1 contains=@juliaExpressions,juliaTryElseBlock,juliaFinallyBlock185syntax region juliaTryElseBlock matchgroup=juliaException transparent contained start="\<else\>" end="\<end\>"me=s-1 contains=@juliaExpressions,juliaFinallyBlock186syntax region juliaFinallyBlock matchgroup=juliaException transparent contained start="\<finally\>" end="\<end\>"me=s-1 contains=@juliaExpressions,juliaCatchBlock187syntax region juliaAbstractBlock matchgroup=juliaBlKeyword start="\<abstract\s\+type\>" end="\<end\>" fold contains=@juliaExpressions,juliaStructR188syntax region juliaPrimitiveBlock matchgroup=juliaBlKeyword start="\<primitive\s\+type\>" end="\<end\>" fold contains=@juliaExpressions,juliaStructR189 190exec 'syntax region juliaComprehensionFor matchgroup=juliaComprehensionFor transparent contained start="\%([^[:space:],;:({[]\_s*\)\@'.s:d(80).'<=\<for\>" end="\ze[]);]" contains=@juliaExpressions,juliaComprehensionIf,juliaComprehensionFor'191syntax match juliaComprehensionIf contained "\<if\>"192 193exec 'syntax match juliaOuter contained "\<outer\ze\s\+' . s:idregex . '\>"'194 195syntax match juliaRangeKeyword contained "\<\%(begin\|end\)\>"196 197syntax 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\)\>"198syntax 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\)\)\>"199syntax match juliaBaseTypeC display "\<\%(FileOffset\|C\%(u\?\%(char\|short\|int\|long\(long\)\?\|w\?string\)\|float\|double\|\%(ptrdiff\|s\?size\|wchar\|off\|u\?intmax\)_t\|void\)\)\>"200syntax 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\)\>"201syntax match juliaBaseTypeIter display "\<\%(EachLine\|Enumerate\|Cartesian\%(Index\|Range\)\|LinSpace\|CartesianIndices\)\>"202syntax match juliaBaseTypeString display "\<\%(DirectIndex\|Sub\|Rep\|Rev\|Abstract\|Substitution\)\?String\>"203syntax 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\)\>"204syntax match juliaBaseTypeDict display "\<\%(WeakKey\|Id\|Abstract\)\?Dict\>"205syntax match juliaBaseTypeSet display "\<\%(\%(Abstract\|Bit\)\?Set\)\>"206syntax match juliaBaseTypeIO display "\<\%(IO\%(Stream\|Buffer\|Context\)\?\|RawFD\|StatStruct\|FileMonitor\|PollingFileWatcher\|Timer\|Base64\%(Decode\|Encode\)Pipe\|\%(UDP\|TCP\)Socket\|\%(Abstract\)\?Channel\|BufferStream\|ReentrantLock\|GenericIOBuffer\)\>"207syntax match juliaBaseTypeProcess display "\<\%(Pipe\|Cmd\|PipeBuffer\)\>"208syntax match juliaBaseTypeRange display "\<\%(Dims\|RangeIndex\|\%(Abstract\|Lin\|Ordinal\|Step\|\%(Abstract\)\?Unit\)Range\|Colon\|ExponentialBackOff\|StepRangeLen\)\>"209syntax match juliaBaseTypeRegex display "\<Regex\%(Match\)\?\>"210syntax match juliaBaseTypeFact display "\<\%(Factorization\|BunchKaufman\|\%(Cholesky\|QR\)\%(Pivoted\)\?\|\%(Generalized\)\?\%(Eigen\|SVD\|Schur\)\|Hessenberg\|LDLt\|LQ\|LU\)\>"211syntax match juliaBaseTypeSort display "\<\%(Insertion\|\(Partial\)\?Quick\|Merge\)Sort\>"212syntax match juliaBaseTypeRound display "\<Round\%(ingMode\|FromZero\|Down\|Nearest\%(Ties\%(Away\|Up\)\)\?\|ToZero\|Up\)\>"213syntax match juliaBaseTypeSpecial display "\<\%(LocalProcess\|ClusterManager\)\>"214syntax match juliaBaseTypeRandom display "\<\%(AbstractRNG\|MersenneTwister\|RandomDevice\)\>"215syntax match juliaBaseTypeDisplay display "\<\%(Text\(Display\)\?\|\%(Abstract\)\?Display\|MIME\|HTML\)\>"216syntax match juliaBaseTypeTime display "\<\%(Date\%(Time\)\?\|DateFormat\)\>"217syntax match juliaBaseTypeOther display "\<\%(RemoteRef\|Task\|Condition\|VersionNumber\|IPv[46]\|SerializationState\|WorkerConfig\|Future\|RemoteChannel\|IPAddr\|Stack\%(Trace\|Frame\)\|\(Caching\|Worker\)Pool\|AbstractSerializer\)\>"218 219syntax match juliaConstNum display "\%(\<\%(\%(NaN\|Inf\)\%(16\|32\|64\)\?\|pi\|π\)\>\)"220" Note: recognition of ℯ, which Vim does not consider a valid identifier, is221" complicated. We detect possible uses by just looking for the character (for222" 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 crude224" way.)225syntax match juliaPossibleEuler "ℯ" contains=juliaEuler226exec '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 . ']"'227syntax match juliaConstBool display "\<\%(true\|false\)\>"228syntax match juliaConstEnv display "\<\%(ARGS\|ENV\|ENDIAN_BOM\|LOAD_PATH\|VERSION\|PROGRAM_FILE\|DEPOT_PATH\)\>"229syntax match juliaConstIO display "\<\%(std\%(out\|in\|err\)\|devnull\)\>"230syntax match juliaConstC display "\<\%(C_NULL\)\>"231syntax match juliaConstGeneric display "\<\%(nothing\|Main\|undef\|missing\)\>"232 233syntax match juliaParamType contained "[^{([:space:]<>\"]\+\ze{" nextgroup=juliaCurBraBlock234 235syntax match juliaPossibleMacro transparent "@" contains=juliaMacroCall,juliaMacroCallP,juliaPrintfMacro,juliaDocMacro,juliaDocMacroPre236 237exec 'syntax match juliaMacro contained "@' . s:idregex . '\%(\.' . s:idregex . '\)*"'238syntax match juliaMacro contained "@[!.~$%^*/\\|<>+-]\ze[^0-9]"239exec 'syntax region juliaMacroCall contained transparent start="\(@' . s:idregex . '\%(\.' . s:idregex . '\)*\)\@=\1\%([^(]\|$\)" end="\ze\%([])};#]\|$\|\<for\>\|\<end\>\)" contains=@juliaExpressions,juliaMacro,juliaSymbolS,juliaQuotedParBlockS'240exec 'syntax region juliaMacroCall contained transparent start="\(@.\)\@=\1\%([^(]\|$\)" end="\ze\%([])};#]\|$\|\<for\>\|\<end\>\)" contains=@juliaExpressions,juliaMacro,juliaSymbolS,juliaQuotedParBlockS'241exec 'syntax region juliaMacroCallP contained transparent start="@' . s:idregex . '\%(\.' . s:idregex . '\)*(" end=")\@'.s:d(1).'<=" contains=juliaMacro,juliaParBlock'242exec 'syntax region juliaMacroCallP contained transparent start="@.(" end=")\@'.s:d(1).'<=" contains=juliaMacro,juliaParBlock'243 244exec 'syntax match juliaNumbers transparent "\%(^\|[' . s:nonidS_chars . s:op_chars_wc . ']\)\@'.s:d(1).'<=\d\|\.\d\|im\>" contains=juliaNumber,juliaFloat,juliaComplexUnit'245 246"integer regexes247let s:dec_regex = '\d\%(_\?\d\)*\%(\>\|im\>\|\ze\D\)'248let s:hex_regex = '0x\x\%(_\?\x\)*\%(\>\|im\>\|\ze\X\)'249let s:bin_regex = '0b[01]\%(_\?[01]\)*\%(\>\|im\>\|\ze[^01]\)'250let s:oct_regex = '0o\o\%(_\?\o\)*\%(\>\|im\>\|\ze\O\)'251 252let s:int_regex = '\%(' . s:hex_regex253 \ . '\|' . s:bin_regex254 \ . '\|' . s:oct_regex255 \ . '\|' . s:dec_regex256 \ . '\)'257 258"floating point regexes259" starting with a dot, optional exponent260let s:float_regex1 = '\.\d\%(_\?\d\)*\%([eEf][-+]\?\d\+\)\?\%(\>\|im\>\|\ze\D\)'261" with dot, optional exponent262let s:float_regex2 = '\d\%(_\?\d\)*\.\%(\d\%(_\?\d\)*\)\?\%([eEf][-+]\?\d\+\)\?\%(\>\|im\>\|\ze\D\)'263" without dot, with exponent264let s:float_regex3 = '\d\%(_\?\d\)*[eEf][-+]\?\d\+\%(\>\|im\>\|\ze\D\)'265 266"hex floating point numbers267" starting with a dot268let s:hexfloat_regex1 = '0x\.\%\(\x\%(_\?\x\)*\)\?[pP][-+]\?\d\+\%(\>\|im\>\|\ze\X\)'269" starting with a digit270let s:hexfloat_regex2 = '0x\x\%(_\?\x\)*\%\(\.\%\(\x\%(_\?\x\)*\)\?\)\?[pP][-+]\?\d\+\%(\>\|im\>\|\ze\X\)'271 272let s:float_regex = '\%(' . s:float_regex3273 \ . '\|' . s:float_regex2274 \ . '\|' . s:float_regex1275 \ . '\|' . s:hexfloat_regex2276 \ . '\|' . s:hexfloat_regex1277 \ . '\)'278 279exec 'syntax match juliaNumber contained "' . s:int_regex . '" contains=juliaComplexUnit'280exec 'syntax match juliaFloat contained "' . s:float_regex . '" contains=juliaComplexUnit'281syntax match juliaComplexUnit display contained "\<im\>"282 283syntax match juliaRangeOperator display ":"284exec 'syntax match juliaOperator "' . s:operators . '"'285 286exec 'syntax region juliaTernaryRegion matchgroup=juliaTernaryOperator start="\s\zs?\ze\s" skip="\%(:\(:\|[^:[:space:]'."'".'"({[]\+\s*\ze:\)\|\%(?\s*\)\@'.s:d(6).'<=:(\)" end=":" contains=@juliaExpressions,juliaErrorSemicol'287 288let s:interp_dollar = '\([' . s:nonidS_chars . s:op_chars_wc . '!]\|^\)\@'.s:d(1).'<=\$'289 290exec 'syntax match juliaDollarVar display contained "' . s:interp_dollar . s:idregex . '"'291exec 'syntax region juliaDollarPar matchgroup=juliaDollarVar contained start="' .s:interp_dollar . '(" end=")" contains=@juliaExpressions'292exec 'syntax region juliaDollarSqBra matchgroup=juliaDollarVar contained start="' .s:interp_dollar . '\[" end="\]" contains=@juliaExpressions,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS'293 294syntax match juliaChar "'\\\?.'" contains=juliaSpecialChar295syntax match juliaChar display "'\\\o\{3\}'" contains=juliaOctalEscapeChar296syntax match juliaChar display "'\\x\x\{2\}'" contains=juliaHexEscapeChar297syntax match juliaChar display "'\\u\x\{1,4\}'" contains=juliaUniCharSmall298syntax match juliaChar display "'\\U\x\{1,8\}'" contains=juliaUniCharLarge299 300exec '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 the303" generic juliaStringPrefixed fallback304syntax region juliaString matchgroup=juliaStringDelim start=+\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckStrings305syntax region juliaStringPrefixed contained matchgroup=juliaStringDelim start=+[^{([:space:]<>"]\+\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialCharsRaw306syntax region juliabString matchgroup=juliaStringDelim start=+\<b\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialChars307syntax region juliasString matchgroup=juliaStringDelim start=+\<s\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpecialChars308 309syntax region juliaDocString matchgroup=juliaDocStringDelim fold start=+^"""+ skip=+\%(\\\\\)*\\"+ end=+"""+ contains=@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckDocStrings310 311exec 'syntax region juliaPrintfMacro contained transparent start="@s\?printf(" end=")\@'.s:d(1).'<=" contains=juliaMacro,juliaPrintfParBlock'312syntax region juliaPrintfMacro contained transparent start="@s\?printf\s\+" end="\ze\%([])};#]\|$\|\<for\>\)" contains=@juliaExprsPrintf,juliaMacro,juliaSymbolS,juliaQuotedParBlockS313syntax region juliaPrintfParBlock contained matchgroup=juliaParDelim start="(" end=")" contains=@juliaExprsPrintf314syntax region juliaPrintfString contained matchgroup=juliaStringDelim start=+"+ skip=+\%(\\\\\)*\\"+ end=+"+ contains=@juliaSpecialChars,@juliaPrintfChars315 316exec 'syntax region juliaDocMacroPre contained transparent start=+@doc\s\+\%(' . s:idregex . '\%(\.' . s:idregex . '\)*\)\z("\%(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\(\z1\)\@'.s:d(3).'<=+ contains=juliaMacro,juliaDocStringMRaw'317exec 'syntax region juliaDocMacro contained transparent start=+@doc\s\+\z("\%(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\(\z1\)\@'.s:d(3).'<=+ contains=juliaMacro,juliaDocStringM'318syntax region juliaDocStringMRaw contained fold matchgroup=juliaDocStringDelim fold start=+\z\("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaSpellcheckDocStrings319syntax region juliaDocStringM contained fold matchgroup=juliaDocStringDelim fold start=+\z\("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1+ contains=@juliaStringVars,@juliaSpecialChars,@juliaSpellcheckDocStrings320 321syntax region juliaShellString matchgroup=juliaStringDelim start=+`+ skip=+\%(\\\\\)*\\`+ end=+`+ contains=@juliaStringVars,juliaSpecialChar322 323syntax cluster juliaStringVars contains=juliaStringVarsPar,juliaStringVarsSqBra,juliaStringVarsCurBra,juliaStringVarsPla324syntax region juliaStringVarsPar contained matchgroup=juliaStringVarDelim start="$(" end=")" contains=@juliaExpressions325syntax region juliaStringVarsSqBra contained matchgroup=juliaStringVarDelim start="$\[" end="\]" contains=@juliaExpressions,juliaComprehensionFor,juliaSymbolS,juliaQuotedParBlockS326syntax region juliaStringVarsCurBra contained matchgroup=juliaStringVarDelim start="${" end="}" contains=@juliaExpressions327exec 'syntax match juliaStringVarsPla contained "\$' . s:idregex . '"'328 329" TODO improve RegEx330syntax region juliaRegEx matchgroup=juliaStringDelim start=+\<r\z("\(""\)\?\)+ skip=+\%(\\\\\)*\\"+ end=+\z1[imsx]*+331 332syntax cluster juliaSpecialChars contains=juliaSpecialChar,juliaDoubleBackslash,juliaEscapedQuote,juliaOctalEscapeChar,juliaHexEscapeChar,juliaUniCharSmall,juliaUniCharLarge333syntax match juliaSpecialChar display contained "\\."334syntax match juliaOctalEscapeChar display contained "\\\o\{3\}"335syntax match juliaHexEscapeChar display contained "\\x\x\{2\}"336syntax match juliaUniCharSmall display contained "\\u\x\{1,4\}"337syntax match juliaUniCharLarge display contained "\\U\x\{1,8\}"338syntax cluster juliaSpecialCharsRaw contains=juliaDoubleBackslash,juliaEscapedQuote339syntax match juliaDoubleBackslash contained "\\\\"340syntax match juliaEscapedQuote contained "\\\""341 342syntax cluster juliaPrintfChars contains=juliaErrorPrintfFmt,juliaPrintfFmt343syntax match juliaErrorPrintfFmt display contained "\\\?%."344syntax match juliaPrintfFmt display contained "%\%(\d\+\$\)\=[-+' #0]*\%(\d*\|\*\|\*\d\+\$\)\%(\.\%(\d*\|\*\|\*\d\+\$\)\)\=\%([hlLjqzt]\|ll\|hh\)\=[aAbdiuoxXDOUfFeEgGcCsSpn]"345syntax match juliaPrintfFmt display contained "%%"346syntax match juliaPrintfFmt display contained "\\%\%(\d\+\$\)\=[-+' #0]*\%(\d*\|\*\|\*\d\+\$\)\%(\.\%(\d*\|\*\|\*\d\+\$\)\)\=\%([hlLjqzt]\|ll\|hh\)\=[aAbdiuoxXDOUfFeEgGcCsSpn]"hs=s+1347syntax match juliaPrintfFmt display contained "\\%%"hs=s+1348 349" this is used to restrict the search for Symbols to when colons appear at all350" (for performance reasons)351syntax match juliaPossibleSymbol transparent ":\ze[^:]" contains=juliaSymbol,juliaQuotedParBlock,juliaQuotedQMarkPar,juliaColon352 353let s:quotable = '\%(' . s:idregex . '\|' . s:operators . '\|[?.]\|' . s:float_regex . '\|' . s:int_regex . '\)'354let 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:'355let 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` as360" ranges rather than symbols in those contexts.361" (Note that such `a :b` expressions only allows at most 5 spaces between362" the identifier and the colon anyway.)363 364exec 'syntax match juliaSymbol contained "' . s:quoting_colon . s:quotable . '"'365exec 'syntax match juliaSymbolS contained "' . s:quoting_colonS . s:quotable . '"'366 367" same as above for quoted expressions such as :(expr)368exec 'syntax region juliaQuotedParBlock matchgroup=juliaQParDelim start="' . s:quoting_colon . '(" end=")" contains=@juliaExpressions'369exec 'syntax match juliaQuotedQMarkPar "' . s:quoting_colon . '(\s*?\s*)" contains=juliaQuotedQMark'370exec 'syntax region juliaQuotedParBlockS matchgroup=juliaQParDelim contained start="' . s:quoting_colonS . '(" end=")" contains=@juliaExpressions'371 372 373syntax match juliaTypeOperatorR1 contained "[^{([:space:]<>\"]\+\%(\s*[<>]:\)\@="374 375" force precedence over Symbols376syntax match juliaTypeOperator contained "[<>:]:"377exec 'syntax match juliaTypeOperatorR2 transparent "[<>:]:\s*\%(' . s:idregex . '\.\)*' . s:idregex . '" contains=juliaTypeOperator,juliaType,juliaDottedT,@juliaExpressions nextgroup=juliaTypeOperator'378syntax match juliaIsaKeyword contained "\<isa\>"379exec 'syntax match juliaTypeOperatorR3 transparent "\<isa\s\+\%(' . s:idregex . '\.\)*' . s:idregex . '" contains=juliaIsaKeyword,juliaType,juliaDottedT,@juliaExpressions nextgroup=juliaIsaKeyword'380 381syntax match juliaWhereKeyword "\<where\>"382exec 'syntax match juliaWhereR transparent "\<where\s\+' . s:idregex . '" contains=juliaWhereKeyword,juliaType,juliaDottedT,juliaIdSymbol'383 384syntax region juliaCommentL matchgroup=juliaCommentDelim excludenl start="#\ze\%([^=]\|$\)" end="$" contains=juliaTodo,@juliaSpellcheckComments385syntax region juliaCommentM matchgroup=juliaCommentDelim fold start="#=\ze\%([^#]\|$\)" end="=#" contains=juliaTodo,juliaCommentM,@juliaSpellcheckComments386syntax keyword juliaTodo contained TODO FIXME XXX387 388" detect an end-of-line with only whitespace or comments before it389let s:eol = '\s*\%(\%(\%(#=\%(=#\@!\|[^=]\|\n\)\{-}=#\)\s*\)\+\)\?\%(#=\@!.*\)\?\n'390 391" a trailing comma, or colon, or an empty line in an import/using/export/public392" multi-line command. Used to recognize the as keyword, and for indentation393" (this needs to take precedence over normal commas and colons, and comments)394syntax cluster juliaContinuationItems contains=juliaContinuationComma,juliaContinuationColon,juliaContinuationNone395exec 'syntax region juliaContinuationComma matchgroup=juliaComma contained start=",\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems'396exec 'syntax region juliaContinuationColon matchgroup=juliaColon contained start=":\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems'397exec 'syntax region juliaContinuationNone matchgroup=NONE contained start="\%(\<\%(import\|using\|export\|public\)\>\|^\)\@'.s:d(6).'<=\ze'.s:eol.'" end="\n\+\ze." contains=@juliaCommentItems,juliaAsKeyword'398exec 'syntax match juliaMacroName contained "@' . s:idregex . '\%(\.' . s:idregex . '\)*"'399 400" the following are disabled by default, but401" can be enabled by entering e.g.402" :hi link juliaParDelim Delimiter403hi def link juliaParDelim juliaNone404hi def link juliaSemicolon juliaNone405hi def link juliaComma juliaNone406hi def link juliaFunctionCall juliaNone407 408hi def link juliaColon juliaOperator409 410hi def link juliaFunctionName juliaFunction411hi def link juliaFunctionName1 juliaFunction412hi def link juliaMacroName juliaMacro413 414 415hi def link juliaKeyword Keyword416hi def link juliaWhereKeyword Keyword417hi def link juliaInfixKeyword Keyword418hi def link juliaIsaKeyword Keyword419hi def link juliaAsKeyword Keyword420hi def link juliaRepKeyword Keyword421hi def link juliaBlKeyword Keyword422hi def link juliaConditional Conditional423hi def link juliaRepeat Repeat424hi def link juliaException Exception425hi def link juliaOuter Keyword426hi def link juliaBaseTypeBasic Type427hi def link juliaBaseTypeNum Type428hi def link juliaBaseTypeC Type429hi def link juliaBaseTypeError Type430hi def link juliaBaseTypeIter Type431hi def link juliaBaseTypeString Type432hi def link juliaBaseTypeArray Type433hi def link juliaBaseTypeDict Type434hi def link juliaBaseTypeSet Type435hi def link juliaBaseTypeIO Type436hi def link juliaBaseTypeProcess Type437hi def link juliaBaseTypeRange Type438hi def link juliaBaseTypeRegex Type439hi def link juliaBaseTypeFact Type440hi def link juliaBaseTypeSort Type441hi def link juliaBaseTypeRound Type442hi def link juliaBaseTypeSpecial Type443hi def link juliaBaseTypeRandom Type444hi def link juliaBaseTypeDisplay Type445hi def link juliaBaseTypeTime Type446hi def link juliaBaseTypeOther Type447 448hi def link juliaType Type449hi def link juliaParamType Type450hi def link juliaTypeOperatorR1 Type451 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 other455" meanings.456hi def link juliaConstNum Constant457hi def link juliaEuler Constant458 459hi def link juliaConstEnv Constant460hi def link juliaConstC Constant461hi def link juliaConstLimits Constant462hi def link juliaConstGeneric Constant463hi def link juliaRangeKeyword Constant464hi def link juliaConstBool Boolean465hi def link juliaConstIO Boolean466 467hi def link juliaComprehensionFor Keyword468hi def link juliaComprehensionIf Keyword469 470hi def link juliaDollarVar Identifier471 472hi def link juliaFunction Function473hi def link juliaMacro Macro474hi def link juliaSymbol Identifier475hi def link juliaSymbolS Identifier476hi def link juliaQParDelim Identifier477hi def link juliaQuotedQMarkPar Identifier478hi def link juliaQuotedQMark juliaOperatorHL479 480hi def link juliaNumber Number481hi def link juliaFloat Float482hi def link juliaComplexUnit Constant483 484hi def link juliaChar Character485 486hi def link juliaString String487hi def link juliaStringPrefixed juliaString488hi def link juliabString juliaString489hi def link juliasString juliaString490hi def link juliavString juliaString491hi def link juliarString juliaString492hi def link juliaipString juliaString493hi def link juliabigString juliaString494hi def link juliaMIMEString juliaString495hi def link juliarawString juliaString496hi def link juliatestString juliaString497hi def link juliahtmlString juliaString498hi def link juliaint128String juliaString499hi def link juliaPrintfString juliaString500hi def link juliaShellString juliaString501hi def link juliaDocString juliaString502hi def link juliaDocStringM juliaDocString503hi def link juliaDocStringMRaw juliaDocString504hi def link juliaStringDelim juliaString505hi def link juliaDocStringDelim juliaDocString506hi def link juliaStringVarsPla Identifier507hi def link juliaStringVarDelim Identifier508 509hi def link juliaRegEx String510 511hi def link juliaSpecialChar SpecialChar512hi def link juliaOctalEscapeChar SpecialChar513hi def link juliaHexEscapeChar SpecialChar514hi def link juliaUniCharSmall SpecialChar515hi def link juliaUniCharLarge SpecialChar516hi def link juliaDoubleBackslash SpecialChar517hi def link juliaEscapedQuote SpecialChar518 519hi def link juliaPrintfFmt SpecialChar520 521if s:julia_highlight_operators522 hi! def link juliaOperatorHL Operator523else524 hi! def link juliaOperatorHL juliaNone525endif526hi def link juliaOperator juliaOperatorHL527hi def link juliaRangeOperator juliaOperatorHL528hi def link juliaCTransOperator juliaOperatorHL529hi def link juliaTernaryOperator juliaOperatorHL530hi def link juliaTypeOperator juliaOperatorHL531 532hi def link juliaCommentL Comment533hi def link juliaCommentM Comment534hi def link juliaCommentDelim Comment535hi def link juliaTodo Todo536 537hi def link juliaErrorPar juliaError538hi def link juliaErrorEnd juliaError539hi def link juliaErrorElse juliaError540hi def link juliaErrorCatch juliaError541hi def link juliaErrorFinally juliaError542hi def link juliaErrorSemicol juliaError543hi def link juliaErrorPrintfFmt juliaError544 545hi def link juliaError Error546 547syntax sync fromstart548 549let b:current_syntax = "julia"550 551let &cpo = s:cpo_save552unlet s:cpo_save553 