diff --git a/README.md b/README.md index ed86c74..4bc0eca 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ If you need full functionality of any plugin, please use it directly with your p - [pgsql](https://github.com/exu/pgsql.vim) (syntax, ftdetect) - [php](https://github.com/StanAngeloff/php.vim) (syntax) - [plantuml](https://github.com/aklt/plantuml-syntax) (syntax, indent, ftplugin, ftdetect) -- [powershell](https://github.com/Persistent13/vim-ps1) (syntax, indent, ftplugin, ftdetect) +- [powershell](https://github.com/PProvost/vim-ps1) (syntax, indent, ftplugin, ftdetect) - [protobuf](https://github.com/uarun/vim-protobuf) (syntax, indent, ftdetect) - [pug](https://github.com/digitaltoad/vim-pug) (syntax, indent, ftplugin, ftdetect) - [puppet](https://github.com/voxpupuli/vim-puppet) (syntax, indent, ftplugin, ftdetect) diff --git a/build b/build index da7962d..cf083e7 100755 --- a/build +++ b/build @@ -159,7 +159,7 @@ PACKS=" pgsql:exu/pgsql.vim php:StanAngeloff/php.vim plantuml:aklt/plantuml-syntax - powershell:Persistent13/vim-ps1 + powershell:PProvost/vim-ps1 protobuf:uarun/vim-protobuf pug:digitaltoad/vim-pug puppet:voxpupuli/vim-puppet diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index 386086d..721fd06 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -658,6 +658,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'powershell') == au BufNewFile,BufRead *.ps1 set ft=ps1 au BufNewFile,BufRead *.psd1 set ft=ps1 au BufNewFile,BufRead *.psm1 set ft=ps1 +au BufNewFile,BufRead *.pssc set ft=ps1 endif @@ -673,7 +674,6 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'powershell') == au BufNewFile,BufRead *.ps1xml set ft=ps1xml - endif " ftdetect/pug.vim @@ -1018,4 +1018,19 @@ au BufNewFile,BufRead *.vue setf vue.html.javascript.css endif +" ftdetect/xml.vim +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'powershell') == -1 + +" Vim ftdetect plugin file +" Language: Windows PowerShell +" Maintainer: Peter Provost +" Version: 2.10 +" Project Repository: https://github.com/PProvost/vim-ps1 +" Vim Script Page: http://www.vim.org/scripts/script.php?script_id=1327 + +au BufNewFile,BufRead *.cdxml set ft=xml +au BufNewFile,BufRead *.psc1 set ft=xml + +endif + augroup END diff --git a/syntax/ps1.vim b/syntax/ps1.vim index e935d58..f69c0ce 100644 --- a/syntax/ps1.vim +++ b/syntax/ps1.vim @@ -10,6 +10,7 @@ if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'powershell') == " The following settings are available for tuning syntax highlighting: " let ps1_nofold_blocks = 1 " let ps1_nofold_sig = 1 +" let ps1_nofold_region = 1 " Compatible VIM syntax file start if version < 600 @@ -18,6 +19,9 @@ elseif exists("b:current_syntax") finish endif +" Operators contain dashes +setlocal iskeyword+=- + " PowerShell doesn't care about case syn case ignore @@ -25,7 +29,7 @@ syn case ignore syn sync minlines=100 " Certain tokens can't appear at the top level of the document -syn cluster ps1NotTop contains=@ps1Comment,ps1CDocParam,ps1Function +syn cluster ps1NotTop contains=@ps1Comment,ps1CDocParam,ps1FunctionDeclaration " Comments and special comment words syn keyword ps1CommentTodo TODO FIXME XXX TBD HACK NOTE contained @@ -42,10 +46,9 @@ syn match ps1Repeat /\/ nextgroup=ps1Block skipwhite syn match ps1Keyword /\/ nextgroup=ps1Block skipwhite syn match ps1Keyword /\/ nextgroup=ps1Block skipwhite -syn keyword ps1Exception begin process end exit +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 match ps1Keyword /&/ syn keyword ps1Constant $true $false $null syn match ps1Constant +\$?+ syn match ps1Constant +\$_+ @@ -55,50 +58,70 @@ syn match ps1Constant +\$^+ " Keywords reserved for future use syn keyword ps1Keyword class define from using var -" Functions and Cmdlets -syn match ps1Cmdlet /\w\+-\w\+/ -syn keyword ps1Keyword function nextgroup=ps1Function skipwhite -syn keyword ps1Keyword filter nextgroup=ps1Function skipwhite -syn match ps1Function /\w\+-*\w*/ contained +" Function declarations +syn keyword ps1Keyword function nextgroup=ps1FunctionDeclaration skipwhite +syn keyword ps1Keyword filter nextgroup=ps1FunctionDeclaration skipwhite +syn keyword ps1Keyword workflow nextgroup=ps1FunctionDeclaration skipwhite +syn keyword ps1Keyword configuration nextgroup=ps1FunctionDeclaration skipwhite +syn keyword ps1Keyword class nextgroup=ps1FunctionDeclaration skipwhite +syn keyword ps1Keyword enum nextgroup=ps1FunctionDeclaration skipwhite +syn match ps1FunctionDeclaration /\w\+\(-\w\+\)*/ contained + +" Function invocations +syn match ps1FunctionInvocation /\w\+\(-\w\+\)\+/ " Type declarations -syn match ps1Type /\[[a-z0-9_:.]\+\(\[\]\)\?\]/ -syn match ps1StandaloneType /[a-z0-9_.]\+/ contained -syn keyword ps1Scope global local private script contained +syn match ps1Type /\[[a-z_][a-z0-9_.,\[\]]\+\]/ -" Variables and other user defined items -syn match ps1Variable /\$\w\+/ -syn match ps1Variable /\${\w\+:\\\w\+}/ -syn match ps1ScopedVariable /\$\w\+:\w\+/ contains=ps1Scope -syn match ps1VariableName /\w\+/ contained +" Variable references +syn match ps1ScopeModifier /\(global:\|local:\|private:\|script:\)/ contained +syn match ps1Variable /\$\w\+\(:\w\+\)\?/ contains=ps1ScopeModifier +syn match ps1Variable /\${\w\+\(:\w\+\)\?}/ contains=ps1ScopeModifier -" Operators all start w/ dash -syn match ps1OperatorStart /-c\?/ nextgroup=ps1Operator -syn keyword ps1Operator eq ne ge gt lt le like notlike match notmatch replace split /contains/ notcontains contained -syn keyword ps1Operator ieq ine ige igt ile ilt ilike inotlike imatch inotmatch ireplace isplit icontains inotcontains contained -syn keyword ps1Operator ceq cne cge cgt clt cle clike cnotlike cmatch cnotmatch creplace csplit ccontains cnotcontains contained -syn keyword ps1Operator is isnot as join contained -syn keyword ps1Operator and or not xor band bor bnot bxor contained -syn keyword ps1Operator f contained +" 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 +syn region ps1String start=/"/ skip=/`"/ end=/"/ contains=@ps1StringSpecial,@Spell syn region ps1String start=/'/ skip=/''/ end=/'/ " Here-Strings -syn region ps1String start=/@"$/ end=/^"@/ contains=@ps1StringSpecial +syn region ps1String start=/@"$/ end=/^"@/ contains=@ps1StringSpecial,@Spell syn region ps1String start=/@'$/ end=/^'@/ " Interpolation -syn match ps1Escape /`./ contained +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 +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 "\(\<\|-\)\@<=\(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]\>" @@ -115,6 +138,10 @@ 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 @@ -130,23 +157,21 @@ if version >= 508 || !exists("did_ps1_syn_inits") HiLink ps1Number Number HiLink ps1Block Block + HiLink ps1Region Region HiLink ps1Exception Exception HiLink ps1Constant Constant HiLink ps1String String HiLink ps1Escape SpecialChar HiLink ps1InterpolationDelimiter Delimiter HiLink ps1Conditional Conditional - HiLink ps1Function Function + HiLink ps1FunctionDeclaration Function + HiLink ps1FunctionInvocation Function HiLink ps1Variable Identifier - HiLink ps1ScopedVariable Identifier - HiLink ps1VariableName Identifier HiLink ps1Boolean Boolean HiLink ps1Constant Constant HiLink ps1BuiltIn StorageClass HiLink ps1Type Type - HiLink ps1Scope Type - HiLink ps1StandaloneType Type - HiLink ps1Number Number + HiLink ps1ScopeModifier StorageClass HiLink ps1Comment Comment HiLink ps1CommentTodo Todo HiLink ps1CommentDoc Tag @@ -156,11 +181,9 @@ if version >= 508 || !exists("did_ps1_syn_inits") HiLink ps1RepeatAndCmdlet Repeat HiLink ps1Keyword Keyword HiLink ps1KeywordAndCmdlet Keyword - HiLink ps1Cmdlet Statement delcommand HiLink endif let b:current_syntax = "ps1" - endif