" Vim syntax file " Language: Cangjie " Maintainer: Wu Junkai " Last Change: 2025 Aug 17 " " The Cangjie programming language is a new-generation programming " language oriented to full-scenario intelligence. It features " native intelligence, being naturally suitable for all scenarios, " high performance and strong security. It is mainly applied in " scenarios such as native applications and service applications " of HarmonyOS NEXT, providing developers with a good programming " experience. " " For more information, see: " - https://cangjie-lang.cn/ " - https://gitcode.com/Cangjie " quit when a syntax file was already loaded if exists("b:current_syntax") finish endif let s:save_cpo = &cpo set cpo&vim " 0. check the user's settings " use let g:cangjie__color to enable/disable syntax highlighting function! s:enabled(item) abort return get(g:, 'cangjie_' . a:item . '_color', 1) endfunction syn case match " 1. comments syn keyword cangjieTodo TODO FIXME XXX NOTE BUG contained syn match cangjieComment /\v\/\/.*/ contains=cangjieTodo syn region cangjieComment start=/\/\*/ end=/\*\// contains=cangjieTodo,@Spell " 2. keywords syn keyword cangjieDeclaration abstract extend macro foreign syn keyword cangjieDeclaration interface open operator override private prop protected syn keyword cangjieDeclaration public redef static type syn keyword cangjieStatement as break case catch continue do else finally for in syn keyword cangjieStatement if in is match quote return spawn super synchronized syn keyword cangjieStatement throw try unsafe where while syn keyword cangjieIdentlike false init main this true syn keyword cangjieVariable const let var syn keyword cangjieOption Option Some None syn keyword cangjieDeclaration func struct class enum import package nextgroup=cangjieTypeName skipwhite syn cluster cangjieKeywordCluster contains=cangjieDeclaration,cangjieStatement,cangjieIdentlike,cangjieVariable,cangjieOption " 3. macro (e.g., @override) syn match cangjieMacro /@\h\w*/ " 4. Type and Function Names syn match cangjieTypeName /\h\w*/ contained " 5. specail identifiers syn region cangjieSpIdentifier start=/`/ end=/`/ oneline " 6. types syn keyword cangjieSpType Any Nothing Range Unit Iterable syn keyword cangjieArrayType Array ArrayList VArray syn keyword cangjieHashType HashMap HashSet syn keyword cangjieCommonType Bool Byte Rune String syn keyword cangjieFloatType Float16 Float32 Float64 syn keyword cangjieIntType Int8 Int16 Int32 Int64 IntNative syn keyword cangjieUIntType UInt8 UInt16 UInt32 UInt64 UIntNative syn cluster cangjieTypeCluster contains=cangjieSpType,cangjieArrayType,cangjieHashType,cangjieCommonType,cangjieFloatType,cangjieIntType,cangjieUIntType " 7. character and strings syn cluster cangjieInterpolatedPart contains=@cangjieKeywordCluster,cangjieSpIdentifier,@cangjieTypeCluster,@cangjieNumberCluster,cangjieOperator syn region cangjieInterpolation contained keepend start=/\${/ end=/}/ contains=@cangjieInterpolatedPart matchgroup=cangjieInterpolationDelimiter syn region cangjieRune start=/r'/ skip=/\\\\\|\\'/ end=/'/ oneline syn region cangjieRune start=/b'/ skip=/\\\\\|\\'/ end=/'/ oneline syn region cangjieString start=/"/ skip=/\\\\\|\\"/ end=/"/ oneline contains=cangjieInterpolation syn region cangjieString start=/'/ skip=/\\\\\|\\'/ end=/'/ oneline contains=cangjieInterpolation syn region cangjieString start=/"""/ skip=/\\\\\|\\"/ end=/"""/ contains=cangjieInterpolation keepend syn region cangjieString start=/'''/ skip=/\\\\\|\\'/ end=/'''/ contains=cangjieInterpolation keepend syn region cangjieRawString start='\z(#*\)#"' end='"#\z1' syn region cangjieRawString start='\z(#*\)#\'' end='\'#\z1' " 8. number syn match cangjieFloatNumber /\v\c<\d[0-9_]*\.\d[0-9_]*([ep][-+]?\d[0-9_]*)?(f(16|32|64))?>/ syn match cangjieFloatNumber /\v\c<\d[0-9_]*\.([ep][-+]?\d[0-9_]*)?(f(16|32|64))?>/ syn match cangjieFloatNumber /\v\c\.\d[0-9_]*([ep][-+]?\d[0-9_]*)?(f(16|32|64))?>/ syn match cangjieScienceNumber /\v\c<\d[0-9_]*[e][-+]?\d[0-9_]*>/ syn match cangjieHexNumber /\v\c<0x[0-9a-f_]+([iu](8|16|32|64))?>/ syn match cangjieOctalNumber /\v\c<0o[0-7_]+([iu](8|16|32|64))?>/ syn match cangjieBinaryNumber /\v\c<0b[01_]+([iu](8|16|32|64))?>/ syn match cangjieDecimalNumber /\v\c<\d[0-9_]*([iu](8|16|32|64))?>/ syn cluster cangjieNumberCluster contains=cangjieFloatNumber,cangjieScienceNumber,cangjieHexNumber,cangjieOctalNumber,cangjieBinaryNumber,cangjieDecimalNumber " 9. operators syn match cangjieOperator /[-+%<>!&|^*=]=\?/ syn match cangjieOperator /\/\%(=\|\ze[^/*]\)/ syn match cangjieOperator /\%(<<\|>>\|&^\)=\?/ syn match cangjieOperator /:=\|||\|<-\|++\|--/ syn match cangjieOperator /[~]/ syn match cangjieOperator /[:]/ syn match cangjieOperator /\.\./ syn match cangjieVarArgs /\.\.\./ " finally, link the syntax groups to the highlight groups if s:enabled('comment') hi def link cangjieTodo Todo hi def link cangjieComment Comment endif if s:enabled('identifier') hi def link cangjieSpIdentifier Identifier endif if s:enabled('keyword') hi def link cangjieDeclaration Keyword hi def link cangjieStatement Statement hi def link cangjieIdentlike Keyword hi def link cangjieVariable Keyword hi def link cangjieOption Keyword endif if s:enabled('macro') hi def link cangjieMacro PreProc endif if s:enabled('number') hi def link cangjieFloatNumber Float hi def link cangjieScienceNumber Float hi def link cangjieHexNumber Number hi def link cangjieOctalNumber Number hi def link cangjieBinaryNumber Number hi def link cangjieDecimalNumber Number endif if s:enabled('operator') hi def link cangjieOperator Operator hi def link cangjieVarArgs Operator endif if s:enabled('string') hi def link cangjieRune Character hi def link cangjieString String hi def link cangjieRawString String endif if s:enabled('type') hi def link cangjieTypeName Type hi def link cangjieSpType Type hi def link cangjieArrayType Type hi def link cangjieHashType Type hi def link cangjieCommonType Type hi def link cangjieFloatType Type hi def link cangjieIntType Type hi def link cangjieUIntType Type endif let b:current_syntax = "cangjie" let &cpo = s:save_cpo unlet s:save_cpo