ps1.vim 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. " Vim syntax file
  2. " Language: Windows PowerShell
  3. " URL: https://github.com/PProvost/vim-ps1
  4. " Last Change: 2020 Nov 24
  5. "
  6. " The following settings are available for tuning syntax highlighting:
  7. " let ps1_nofold_blocks = 1
  8. " let ps1_nofold_sig = 1
  9. " let ps1_nofold_region = 1
  10. if exists("b:current_syntax")
  11. finish
  12. endif
  13. " Operators contain dashes
  14. setlocal iskeyword+=-
  15. " PowerShell doesn't care about case
  16. syn case ignore
  17. " Sync-ing method
  18. syn sync minlines=100
  19. " Certain tokens can't appear at the top level of the document
  20. syn cluster ps1NotTop contains=@ps1Comment,ps1CDocParam,ps1FunctionDeclaration
  21. " Comments and special comment words
  22. syn keyword ps1CommentTodo TODO FIXME XXX TBD HACK NOTE contained
  23. syn match ps1CDocParam /.*/ contained
  24. syn match ps1CommentDoc /^\s*\zs\.\w\+\>/ nextgroup=ps1CDocParam contained
  25. syn match ps1CommentDoc /#\s*\zs\.\w\+\>/ nextgroup=ps1CDocParam contained
  26. syn match ps1Comment /#.*/ contains=ps1CommentTodo,ps1CommentDoc,@Spell
  27. syn region ps1Comment start="<#" end="#>" contains=ps1CommentTodo,ps1CommentDoc,@Spell
  28. " Language keywords and elements
  29. syn keyword ps1Conditional if else elseif switch default
  30. syn keyword ps1Repeat while for do until break continue foreach in
  31. syn match ps1Repeat /\<foreach\>/ nextgroup=ps1Block skipwhite
  32. syn match ps1Keyword /\<while\>/ nextgroup=ps1Block skipwhite
  33. syn match ps1Keyword /\<where\>/ nextgroup=ps1Block skipwhite
  34. syn keyword ps1Exception begin process end exit inlinescript parallel sequence
  35. syn keyword ps1Keyword try catch finally throw
  36. syn keyword ps1Keyword return filter in trap param data dynamicparam
  37. syn keyword ps1Constant $true $false $null
  38. syn match ps1Constant +\$?+
  39. syn match ps1Constant +\$_+
  40. syn match ps1Constant +\$\$+
  41. syn match ps1Constant +\$^+
  42. " Keywords reserved for future use
  43. syn keyword ps1Keyword class define from using var
  44. " Function declarations
  45. syn keyword ps1Keyword function nextgroup=ps1Function skipwhite
  46. syn keyword ps1Keyword filter nextgroup=ps1Function skipwhite
  47. syn keyword ps1Keyword workflow nextgroup=ps1Function skipwhite
  48. syn keyword ps1Keyword configuration nextgroup=ps1Function skipwhite
  49. syn keyword ps1Keyword class nextgroup=ps1Function skipwhite
  50. syn keyword ps1Keyword enum nextgroup=ps1Function skipwhite
  51. " Function declarations and invocations
  52. 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
  53. syn match ps1Cmdlet /\v(connect|disconnect|read|receive|send|write)(-\w+)+/ contained
  54. 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
  55. syn match ps1Cmdlet /\v(debug|measure|ping|repair|resolve|test|trace)(-\w+)+/ contained
  56. 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
  57. syn match ps1Cmdlet /\v(block|grant|protect|revoke|unblock|unprotect)(-\w+)+/ contained
  58. syn match ps1Cmdlet /\v(use)(-\w+)+/ contained
  59. " Other functions
  60. syn match ps1Function /\w\+\(-\w\+\)\+/ contains=ps1Cmdlet
  61. " Type declarations
  62. syn match ps1Type /\[[a-z_][a-z0-9_.,\[\]]\+\]/
  63. " Variable references
  64. syn match ps1ScopeModifier /\(global:\|local:\|private:\|script:\)/ contained
  65. syn match ps1Variable /\$\w\+\(:\w\+\)\?/ contains=ps1ScopeModifier
  66. syn match ps1Variable /\${\w\+\(:\?[[:alnum:]_()]\+\)\?}/ contains=ps1ScopeModifier
  67. " Operators
  68. syn keyword ps1Operator -eq -ne -ge -gt -lt -le -like -notlike -match -notmatch -replace -split -contains -notcontains
  69. syn keyword ps1Operator -ieq -ine -ige -igt -ile -ilt -ilike -inotlike -imatch -inotmatch -ireplace -isplit -icontains -inotcontains
  70. syn keyword ps1Operator -ceq -cne -cge -cgt -clt -cle -clike -cnotlike -cmatch -cnotmatch -creplace -csplit -ccontains -cnotcontains
  71. syn keyword ps1Operator -in -notin
  72. syn keyword ps1Operator -is -isnot -as -join
  73. syn keyword ps1Operator -and -or -not -xor -band -bor -bnot -bxor
  74. syn keyword ps1Operator -f
  75. syn match ps1Operator /!/
  76. syn match ps1Operator /=/
  77. syn match ps1Operator /+=/
  78. syn match ps1Operator /-=/
  79. syn match ps1Operator /\*=/
  80. syn match ps1Operator /\/=/
  81. syn match ps1Operator /%=/
  82. syn match ps1Operator /+/
  83. syn match ps1Operator /-\(\s\|\d\|\.\|\$\|(\)\@=/
  84. syn match ps1Operator /\*/
  85. syn match ps1Operator /\//
  86. syn match ps1Operator /|/
  87. syn match ps1Operator /%/
  88. syn match ps1Operator /&/
  89. syn match ps1Operator /::/
  90. syn match ps1Operator /,/
  91. syn match ps1Operator /\(^\|\s\)\@<=\. \@=/
  92. " Regular Strings
  93. " These aren't precisely correct and could use some work
  94. syn region ps1String start=/"/ skip=/`"/ end=/"/ contains=@ps1StringSpecial,@Spell
  95. syn region ps1String start=/'/ skip=/''/ end=/'/
  96. " Here-Strings
  97. syn region ps1String start=/@"$/ end=/^"@/ contains=@ps1StringSpecial,@Spell
  98. syn region ps1String start=/@'$/ end=/^'@/
  99. " Interpolation
  100. syn match ps1Escape /`./
  101. syn region ps1Interpolation matchgroup=ps1InterpolationDelimiter start="$(" end=")" contained contains=ALLBUT,@ps1NotTop
  102. syn region ps1NestedParentheses start="(" skip="\\\\\|\\)" matchgroup=ps1Interpolation end=")" transparent contained
  103. syn cluster ps1StringSpecial contains=ps1Escape,ps1Interpolation,ps1Variable,ps1Boolean,ps1Constant,ps1BuiltIn,@Spell
  104. " Numbers
  105. syn match ps1Number "\(\<\|-\)\@<=\(0[xX]\x\+\|\d\+\)\([KMGTP][B]\)\=\(\>\|-\)\@="
  106. syn match ps1Number "\(\(\<\|-\)\@<=\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[dD]\="
  107. syn match ps1Number "\<\d\+[eE][-+]\=\d\+[dD]\=\>"
  108. syn match ps1Number "\<\d\+\([eE][-+]\=\d\+\)\=[dD]\>"
  109. " Constants
  110. syn match ps1Boolean "$\%(true\|false\)\>"
  111. syn match ps1Constant /\$null\>/
  112. syn match ps1BuiltIn "$^\|$?\|$_\|$\$"
  113. syn match ps1BuiltIn "$\%(args\|error\|foreach\|home\|input\)\>"
  114. syn match ps1BuiltIn "$\%(match\(es\)\?\|myinvocation\|host\|lastexitcode\)\>"
  115. syn match ps1BuiltIn "$\%(ofs\|shellid\|stacktrace\)\>"
  116. " Named Switch
  117. syn match ps1Label /\s-\w\+/
  118. " Folding blocks
  119. if !exists('g:ps1_nofold_blocks')
  120. syn region ps1Block start=/{/ end=/}/ transparent fold
  121. endif
  122. if !exists('g:ps1_nofold_region')
  123. syn region ps1Region start=/#region/ end=/#endregion/ transparent fold keepend extend
  124. endif
  125. if !exists('g:ps1_nofold_sig')
  126. syn region ps1Signature start=/# SIG # Begin signature block/ end=/# SIG # End signature block/ transparent fold
  127. endif
  128. " Setup default color highlighting
  129. hi def link ps1Number Number
  130. hi def link ps1Block Block
  131. hi def link ps1Region Region
  132. hi def link ps1Exception Exception
  133. hi def link ps1Constant Constant
  134. hi def link ps1String String
  135. hi def link ps1Escape SpecialChar
  136. hi def link ps1InterpolationDelimiter Delimiter
  137. hi def link ps1Conditional Conditional
  138. hi def link ps1Cmdlet Function
  139. hi def link ps1Function Identifier
  140. hi def link ps1Variable Identifier
  141. hi def link ps1Boolean Boolean
  142. hi def link ps1Constant Constant
  143. hi def link ps1BuiltIn StorageClass
  144. hi def link ps1Type Type
  145. hi def link ps1ScopeModifier StorageClass
  146. hi def link ps1Comment Comment
  147. hi def link ps1CommentTodo Todo
  148. hi def link ps1CommentDoc Tag
  149. hi def link ps1CDocParam Identifier
  150. hi def link ps1Operator Operator
  151. hi def link ps1Repeat Repeat
  152. hi def link ps1RepeatAndCmdlet Repeat
  153. hi def link ps1Keyword Keyword
  154. hi def link ps1KeywordAndCmdlet Keyword
  155. hi def link ps1Label Label
  156. let b:current_syntax = "ps1"