📄 sml.vim
字号:
" Vim syntax file" Language: SML" Filenames: *.sml *.sig" Maintainers: Markus Mottl <mottl@miss.wu-wien.ac.at>" Fabrizio Zeno Cornelli <zeno@filibusta.crema.unimi.it>" URL: http://miss.wu-wien.ac.at/~mottl/vim/syntax/sml.vim" Last Change: 2001 May 10" 2000 Oct 01 - integrated Fabrizio's syntax file and" cleaned up for distribution" 2000 Feb 24 - structures and signatures improved" For version 5.x: Clear all syntax items" For version 6.x: Quit when a syntax file was already loadedif version < 600 syntax clearelseif exists("b:current_syntax") finishendif" SML is case sensitive.syn case match" lowercase identifier - the standard way to matchsyn match smlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/syn match smlKeyChar "|"" Errorssyn match smlBraceErr "}"syn match smlBrackErr "\]"syn match smlParenErr ")"syn match smlCommentErr "\*)"syn match smlThenErr "\<then\>"" Error-highlighting of "end" without synchronization:" as keyword or as error (default)if exists("sml_noend_error") syn match smlKeyword "\<end\>"else syn match smlEndErr "\<end\>"endif" Some convenient clusterssyn cluster smlAllErrs contains=smlBraceErr,smlBrackErr,smlParenErr,smlCommentErr,smlEndErr,smlThenErrsyn cluster smlAENoParen contains=smlBraceErr,smlBrackErr,smlCommentErr,smlEndErr,smlThenErrsyn cluster smlContained contains=smlTodo,smlPreDef,smlModParam,smlModParam1,smlPreMPRestr,smlMPRestr,smlMPRestr1,smlMPRestr2,smlMPRestr3,smlModRHS,smlFuncWith,smlFuncStruct,smlModTypeRestr,smlModTRWith,smlWith,smlWithRest,smlModType,smlFullMod" Enclosing delimiterssyn region smlEncl transparent matchgroup=smlKeyword start="(" matchgroup=smlKeyword end=")" contains=ALLBUT,@smlContained,smlParenErrsyn region smlEncl transparent matchgroup=smlKeyword start="{" matchgroup=smlKeyword end="}" contains=ALLBUT,@smlContained,smlBraceErrsyn region smlEncl transparent matchgroup=smlKeyword start="\[" matchgroup=smlKeyword end="\]" contains=ALLBUT,@smlContained,smlBrackErrsyn region smlEncl transparent matchgroup=smlKeyword start="#\[" matchgroup=smlKeyword end="\]" contains=ALLBUT,@smlContained,smlBrackErr" Commentssyn region smlComment start="(\*" end="\*)" contains=smlComment,smlTodosyn keyword smlTodo contained TODO FIXME XXX" letsyn region smlEnd matchgroup=smlKeyword start="\<let\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr" localsyn region smlEnd matchgroup=smlKeyword start="\<local\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr" Blocks" "begin"syn region smlEnd matchgroup=smlKeyword start="\<begin\>" matchgroup=smlKeyword end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr" "if"syn region smlNone matchgroup=smlKeyword start="\<if\>" matchgroup=smlKeyword end="\<then\>" contains=ALLBUT,@smlContained,smlThenErr"" Modules" "struct"syn region smlStruct matchgroup=smlModule start="\<struct\>" matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr" "sig"syn region smlSig matchgroup=smlModule start="\<sig\>" matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErr,smlModulesyn region smlModSpec matchgroup=smlKeyword start="\<structure\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contained contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlModTRWith,smlMPRestr" "open"syn region smlNone matchgroup=smlKeyword start="\<open\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*\>" contains=@smlAllErrs,smlComment" "structure" - somewhat complicated stuff ;-)syn region smlModule matchgroup=smlKeyword start="\<\(structure\|functor\)\>" matchgroup=smlModule end="\<\u\(\w\|'\)*\>" contains=@smlAllErrs,smlComment skipwhite skipempty nextgroup=smlPreDefsyn region smlPreDef start="."me=e-1 matchgroup=smlKeyword end="\l\|="me=e-1 contained contains=@smlAllErrs,smlComment,smlModParam,smlModTypeRestr,smlModTRWith nextgroup=smlModPreRHSsyn region smlModParam start="([^*]" end=")" contained contains=@smlAENoParen,smlModParam1syn match smlModParam1 "\<\u\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=smlPreMPRestrsyn region smlPreMPRestr start="."me=e-1 end=")"me=e-1 contained contains=@smlAllErrs,smlComment,smlMPRestr,smlModTypeRestrsyn region smlMPRestr start=":" end="."me=e-1 contained contains=@smlComment skipwhite skipempty nextgroup=smlMPRestr1,smlMPRestr2,smlMPRestr3syn region smlMPRestr1 matchgroup=smlModule start="\ssig\s\=" matchgroup=smlModule end="\<end\>" contained contains=ALLBUT,@smlContained,smlEndErr,smlModulesyn region smlMPRestr2 start="\sfunctor\(\s\|(\)\="me=e-1 matchgroup=smlKeyword end="->" contained contains=@smlAllErrs,smlComment,smlModParam skipwhite skipempty nextgroup=smlFuncWithsyn match smlMPRestr3 "\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*" containedsyn match smlModPreRHS "=" contained skipwhite skipempty nextgroup=smlModParam,smlFullModsyn region smlModRHS start="." end=".\w\|([^*]"me=e-2 contained contains=smlComment skipwhite skipempty nextgroup=smlModParam,smlFullModsyn match smlFullMod "\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*" contained skipwhite skipempty nextgroup=smlFuncWithsyn region smlFuncWith start="("me=e-1 end=")" contained contains=smlComment,smlWith,smlFuncStructsyn region smlFuncStruct matchgroup=smlModule start="[^a-zA-Z]struct\>"hs=s+1 matchgroup=smlModule end="\<end\>" contains=ALLBUT,@smlContained,smlEndErrsyn match smlModTypeRestr "\<\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*\>" containedsyn region smlModTRWith start=":\s*("hs=s+1 end=")" contained contains=@smlAENoParen,smlWithsyn match smlWith "\<\(\u\(\w\|'\)*\.\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=smlWithRestsyn region smlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@smlContained" "signature"syn region smlKeyword start="\<signature\>" matchgroup=smlModule end="\<\w\(\w\|'\)*\>" contains=smlComment skipwhite skipempty nextgroup=smlMTDefsyn match smlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=ssyn keyword smlKeyword abstype and andalso casesyn keyword smlKeyword datatype else eqtypesyn keyword smlKeyword exception fn fun handlesyn keyword smlKeyword in infix infixl infixlsyn keyword smlKeyword match nonfix of orelsesyn keyword smlKeyword raise handle typesyn keyword smlKeyword val where while with withtypesyn keyword smlType bool char exn int list optionsyn keyword smlType real string unitsyn keyword smlOperator div mod not or quot remsyn keyword smlBoolean true falsesyn match smlConstructor "(\s*)"syn match smlConstructor "\[\s*\]"syn match smlConstructor "#\[\s*\]"syn match smlConstructor "\u\(\w\|'\)*\>"" Module prefixsyn match smlModPath "\u\(\w\|'\)*\."he=e-1syn match smlCharacter +#"."\|#"\\\d\d\d"+syn match smlCharErr +#"\\\d\d"\|#"\\\d"+syn region smlString start=+"+ skip=+\\\\\|\\"+ end=+"+syn match smlFunDef "=>"syn match smlRefAssign ":="syn match smlTopStop ";;"syn match smlOperator "\^"syn match smlOperator "::"syn match smlAnyVar "\<_\>"syn match smlKeyChar "!"syn match smlKeyChar ";"syn match smlKeyChar "\*"syn match smlKeyChar "="syn match smlNumber "\<-\=\d\+\>"syn match smlNumber "\<-\=0[x|X]\x\+\>"syn match smlReal "\<-\=\d\+\.\d*\([eE][-+]\=\d\+\)\=[fl]\=\>"" Synchronizationsyn sync minlines=20syn sync maxlines=500syn sync match smlEndSync grouphere smlEnd "\<begin\>"syn sync match smlEndSync groupthere smlEnd "\<end\>"syn sync match smlStructSync grouphere smlStruct "\<struct\>"syn sync match smlStructSync groupthere smlStruct "\<end\>"syn sync match smlSigSync grouphere smlSig "\<sig\>"syn sync match smlSigSync groupthere smlSig "\<end\>"" Define the default highlighting." For version 5.7 and earlier: only when not done already" For version 5.8 and later: only when an item doesn't have highlighting yetif version >= 508 || !exists("did_sml_syntax_inits") if version < 508 let did_sml_syntax_inits = 1 command -nargs=+ HiLink hi link <args> else command -nargs=+ HiLink hi def link <args> endif HiLink smlBraceErr Error HiLink smlBrackErr Error HiLink smlParenErr Error HiLink smlCommentErr Error HiLink smlEndErr Error HiLink smlThenErr Error HiLink smlCharErr Error HiLink smlComment Comment HiLink smlModPath Include HiLink smlModule Include HiLink smlModParam1 Include HiLink smlModType Include HiLink smlMPRestr3 Include HiLink smlFullMod Include HiLink smlModTypeRestr Include HiLink smlWith Include HiLink smlMTDef Include HiLink smlConstructor Constant HiLink smlModPreRHS Keyword HiLink smlMPRestr2 Keyword HiLink smlKeyword Keyword HiLink smlFunDef Keyword HiLink smlRefAssign Keyword HiLink smlKeyChar Keyword HiLink smlAnyVar Keyword HiLink smlTopStop Keyword HiLink smlOperator Keyword HiLink smlBoolean Boolean HiLink smlCharacter Character HiLink smlNumber Number HiLink smlReal Float HiLink smlString String HiLink smlType Type HiLink smlTodo Todo HiLink smlEncl Keyword delcommand HiLinkendiflet b:current_syntax = "sml"" vim: ts=28
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -