forked from aniani/vim
		
	
		
			
	
	
		
			183 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
		
		
			
		
	
	
			183 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
|   | " Vim syntax file | ||
|  | " Language:    Windows PowerShell | ||
|  | " URL:         https://github.com/PProvost/vim-ps1 | ||
|  | " Last Change: 2020 Nov 24 | ||
|  | " | ||
|  | " The following settings are available for tuning syntax highlighting: | ||
|  | "    let ps1_nofold_blocks = 1 | ||
|  | "    let ps1_nofold_sig = 1 | ||
|  | "    let ps1_nofold_region = 1 | ||
|  | 
 | ||
|  | if exists("b:current_syntax") | ||
|  | 	finish | ||
|  | endif | ||
|  | 
 | ||
|  | " Operators contain dashes | ||
|  | setlocal iskeyword+=- | ||
|  | 
 | ||
|  | " PowerShell doesn't care about case | ||
|  | syn case ignore | ||
|  | 
 | ||
|  | " Sync-ing method | ||
|  | syn sync minlines=100 | ||
|  | 
 | ||
|  | " Certain tokens can't appear at the top level of the document | ||
|  | syn cluster ps1NotTop contains=@ps1Comment,ps1CDocParam,ps1FunctionDeclaration | ||
|  | 
 | ||
|  | " Comments and special comment words | ||
|  | syn keyword ps1CommentTodo TODO FIXME XXX TBD HACK NOTE contained | ||
|  | syn match ps1CDocParam /.*/ contained | ||
|  | syn match ps1CommentDoc /^\s*\zs\.\w\+\>/ nextgroup=ps1CDocParam contained | ||
|  | syn match ps1CommentDoc /#\s*\zs\.\w\+\>/ nextgroup=ps1CDocParam contained | ||
|  | syn match ps1Comment /#.*/ contains=ps1CommentTodo,ps1CommentDoc,@Spell | ||
|  | syn region ps1Comment start="<#" end="#>" contains=ps1CommentTodo,ps1CommentDoc,@Spell | ||
|  | 
 | ||
|  | " Language keywords and elements | ||
|  | syn keyword ps1Conditional if else elseif switch default | ||
|  | syn keyword ps1Repeat while for do until break continue foreach in | ||
|  | syn match ps1Repeat /\<foreach\>/ nextgroup=ps1Block skipwhite | ||
|  | syn match ps1Keyword /\<while\>/ nextgroup=ps1Block skipwhite | ||
|  | syn match ps1Keyword /\<where\>/ nextgroup=ps1Block skipwhite | ||
|  | 
 | ||
|  | syn keyword ps1Exception begin process end exit inlinescript parallel sequence | ||
|  | syn keyword ps1Keyword try catch finally throw | ||
|  | syn keyword ps1Keyword return filter in trap param data dynamicparam  | ||
|  | syn keyword ps1Constant $true $false $null | ||
|  | syn match ps1Constant +\$?+ | ||
|  | syn match ps1Constant +\$_+ | ||
|  | syn match ps1Constant +\$\$+ | ||
|  | syn match ps1Constant +\$^+ | ||
|  | 
 | ||
|  | " Keywords reserved for future use | ||
|  | syn keyword ps1Keyword class define from using var | ||
|  | 
 | ||
|  | " Function declarations | ||
|  | syn keyword ps1Keyword function nextgroup=ps1Function skipwhite | ||
|  | syn keyword ps1Keyword filter nextgroup=ps1Function skipwhite | ||
|  | syn keyword ps1Keyword workflow nextgroup=ps1Function skipwhite | ||
|  | syn keyword ps1Keyword configuration nextgroup=ps1Function skipwhite | ||
|  | syn keyword ps1Keyword class nextgroup=ps1Function skipwhite | ||
|  | syn keyword ps1Keyword enum nextgroup=ps1Function skipwhite | ||
|  | 
 | ||
|  | " Function declarations and invocations | ||
|  | syn match ps1Cmdlet /\v(add|clear|close|copy|enter|exit|find|format|get|hide|join|lock|move|new|open|optimize|pop|push|redo|remove|rename|reset|search|select|Set|show|skip|split|step|switch|undo|unlock|watch)(-\w+)+/ contained | ||
|  | syn match ps1Cmdlet /\v(connect|disconnect|read|receive|send|write)(-\w+)+/ contained | ||
|  | syn match ps1Cmdlet /\v(backup|checkpoint|compare|compress|convert|convertfrom|convertto|dismount|edit|expand|export|group|import|initialize|limit|merge|mount|out|publish|restore|save|sync|unpublish|update)(-\w+)+/ contained | ||
|  | syn match ps1Cmdlet /\v(debug|measure|ping|repair|resolve|test|trace)(-\w+)+/ contained | ||
|  | syn match ps1Cmdlet /\v(approve|assert|build|complete|confirm|deny|deploy|disable|enable|install|invoke|register|request|restart|resume|start|stop|submit|suspend|uninstall|unregister|wait)(-\w+)+/ contained | ||
|  | syn match ps1Cmdlet /\v(block|grant|protect|revoke|unblock|unprotect)(-\w+)+/ contained | ||
|  | syn match ps1Cmdlet /\v(use)(-\w+)+/ contained | ||
|  | 
 | ||
|  | " Other functions | ||
|  | syn match ps1Function /\w\+\(-\w\+\)\+/ contains=ps1Cmdlet | ||
|  | 
 | ||
|  | " Type declarations | ||
|  | syn match ps1Type /\[[a-z_][a-z0-9_.,\[\]]\+\]/ | ||
|  | 
 | ||
|  | " Variable references | ||
|  | syn match ps1ScopeModifier /\(global:\|local:\|private:\|script:\)/ contained | ||
|  | syn match ps1Variable /\$\w\+\(:\w\+\)\?/ contains=ps1ScopeModifier | ||
|  | syn match ps1Variable /\${\w\+\(:\?[[:alnum:]_()]\+\)\?}/ contains=ps1ScopeModifier | ||
|  | 
 | ||
|  | " Operators | ||
|  | syn keyword ps1Operator -eq -ne -ge -gt -lt -le -like -notlike -match -notmatch -replace -split -contains -notcontains | ||
|  | syn keyword ps1Operator -ieq -ine -ige -igt -ile -ilt -ilike -inotlike -imatch -inotmatch -ireplace -isplit -icontains -inotcontains | ||
|  | syn keyword ps1Operator -ceq -cne -cge -cgt -clt -cle -clike -cnotlike -cmatch -cnotmatch -creplace -csplit -ccontains -cnotcontains | ||
|  | syn keyword ps1Operator -in -notin | ||
|  | syn keyword ps1Operator -is -isnot -as -join | ||
|  | syn keyword ps1Operator -and -or -not -xor -band -bor -bnot -bxor | ||
|  | syn keyword ps1Operator -f | ||
|  | syn match ps1Operator /!/ | ||
|  | syn match ps1Operator /=/ | ||
|  | syn match ps1Operator /+=/ | ||
|  | syn match ps1Operator /-=/ | ||
|  | syn match ps1Operator /\*=/ | ||
|  | syn match ps1Operator /\/=/ | ||
|  | syn match ps1Operator /%=/ | ||
|  | syn match ps1Operator /+/ | ||
|  | syn match ps1Operator /-\(\s\|\d\|\.\|\$\|(\)\@=/ | ||
|  | syn match ps1Operator /\*/ | ||
|  | syn match ps1Operator /\// | ||
|  | syn match ps1Operator /|/ | ||
|  | syn match ps1Operator /%/ | ||
|  | syn match ps1Operator /&/ | ||
|  | syn match ps1Operator /::/ | ||
|  | syn match ps1Operator /,/ | ||
|  | syn match ps1Operator /\(^\|\s\)\@<=\. \@=/ | ||
|  | 
 | ||
|  | " Regular Strings | ||
|  | " These aren't precisely correct and could use some work | ||
|  | syn region ps1String start=/"/ skip=/`"/ end=/"/ contains=@ps1StringSpecial,@Spell | ||
|  | syn region ps1String start=/'/ skip=/''/ end=/'/ | ||
|  | 
 | ||
|  | " Here-Strings | ||
|  | syn region ps1String start=/@"$/ end=/^"@/ contains=@ps1StringSpecial,@Spell | ||
|  | syn region ps1String start=/@'$/ end=/^'@/ | ||
|  | 
 | ||
|  | " Interpolation | ||
|  | syn match ps1Escape /`./ | ||
|  | syn region ps1Interpolation matchgroup=ps1InterpolationDelimiter start="$(" end=")" contained contains=ALLBUT,@ps1NotTop | ||
|  | syn region ps1NestedParentheses start="(" skip="\\\\\|\\)" matchgroup=ps1Interpolation end=")" transparent contained | ||
|  | syn cluster ps1StringSpecial contains=ps1Escape,ps1Interpolation,ps1Variable,ps1Boolean,ps1Constant,ps1BuiltIn,@Spell | ||
|  | 
 | ||
|  | " Numbers | ||
|  | syn match   ps1Number		"\(\<\|-\)\@<=\(0[xX]\x\+\|\d\+\)\([KMGTP][B]\)\=\(\>\|-\)\@=" | ||
|  | syn match   ps1Number		"\(\(\<\|-\)\@<=\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[dD]\=" | ||
|  | syn match   ps1Number		"\<\d\+[eE][-+]\=\d\+[dD]\=\>" | ||
|  | syn match   ps1Number		"\<\d\+\([eE][-+]\=\d\+\)\=[dD]\>" | ||
|  | 
 | ||
|  | " Constants | ||
|  | syn match ps1Boolean "$\%(true\|false\)\>" | ||
|  | syn match ps1Constant /\$null\>/ | ||
|  | syn match ps1BuiltIn "$^\|$?\|$_\|$\$" | ||
|  | syn match ps1BuiltIn "$\%(args\|error\|foreach\|home\|input\)\>" | ||
|  | syn match ps1BuiltIn "$\%(match\(es\)\?\|myinvocation\|host\|lastexitcode\)\>" | ||
|  | syn match ps1BuiltIn "$\%(ofs\|shellid\|stacktrace\)\>" | ||
|  | 
 | ||
|  | " Named Switch | ||
|  | syn match ps1Label /\s-\w\+/ | ||
|  | 
 | ||
|  | " Folding blocks | ||
|  | if !exists('g:ps1_nofold_blocks') | ||
|  | 	syn region ps1Block start=/{/ end=/}/ transparent fold | ||
|  | endif | ||
|  | 
 | ||
|  | if !exists('g:ps1_nofold_region') | ||
|  | 	syn region ps1Region start=/#region/ end=/#endregion/ transparent fold keepend extend | ||
|  | endif | ||
|  | 
 | ||
|  | if !exists('g:ps1_nofold_sig') | ||
|  | 	syn region ps1Signature start=/# SIG # Begin signature block/ end=/# SIG # End signature block/ transparent fold | ||
|  | endif | ||
|  | 
 | ||
|  | " Setup default color highlighting | ||
|  | hi def link ps1Number Number | ||
|  | hi def link ps1Block Block | ||
|  | hi def link ps1Region Region | ||
|  | hi def link ps1Exception Exception | ||
|  | hi def link ps1Constant Constant | ||
|  | hi def link ps1String String | ||
|  | hi def link ps1Escape SpecialChar | ||
|  | hi def link ps1InterpolationDelimiter Delimiter | ||
|  | hi def link ps1Conditional Conditional | ||
|  | hi def link ps1Cmdlet Function | ||
|  | hi def link ps1Function Identifier | ||
|  | hi def link ps1Variable Identifier | ||
|  | hi def link ps1Boolean Boolean | ||
|  | hi def link ps1Constant Constant | ||
|  | hi def link ps1BuiltIn StorageClass | ||
|  | hi def link ps1Type Type | ||
|  | hi def link ps1ScopeModifier StorageClass | ||
|  | hi def link ps1Comment Comment | ||
|  | hi def link ps1CommentTodo Todo | ||
|  | hi def link ps1CommentDoc Tag | ||
|  | hi def link ps1CDocParam Identifier | ||
|  | hi def link ps1Operator Operator | ||
|  | hi def link ps1Repeat Repeat | ||
|  | hi def link ps1RepeatAndCmdlet Repeat | ||
|  | hi def link ps1Keyword Keyword | ||
|  | hi def link ps1KeywordAndCmdlet Keyword | ||
|  | hi def link ps1Label Label | ||
|  | 
 | ||
|  | let b:current_syntax = "ps1" |