diff options
| -rw-r--r-- | README.md | 1 | ||||
| -rwxr-xr-x | build | 1 | ||||
| -rw-r--r-- | ftdetect/polyglot.vim | 4 | ||||
| -rw-r--r-- | ftplugin/ps1.vim | 34 | ||||
| -rw-r--r-- | ftplugin/ps1xml.vim | 31 | ||||
| -rw-r--r-- | indent/ps1.vim | 20 | ||||
| -rw-r--r-- | syntax/ps1.vim | 162 | ||||
| -rw-r--r-- | syntax/ps1xml.vim | 56 | 
8 files changed, 309 insertions, 0 deletions
| @@ -63,6 +63,7 @@ Optionally download one of the [releases](https://github.com/sheerun/vim-polyglo  - [perl](https://github.com/vim-perl/vim-perl) (syntax, indent, ftplugin, ftdetect)  - [php](https://github.com/StanAngeloff/php.vim) (syntax)  - [puppet](https://github.com/rodjek/vim-puppet) (syntax, indent, ftplugin, ftdetect) +- [powershell](https://github.com/Persistent13/vim-ps1) (syntax, indent, ftplugin, ftdetect)  - [protobuf](https://github.com/uarun/vim-protobuf) (syntax, ftdetect)  - [python](https://github.com/mitsuhiko/vim-python-combined) (syntax, indent)  - [r-lang](https://github.com/vim-scripts/R.vim) (syntax, ftplugin) @@ -106,6 +106,7 @@ PACKS="    perl:vim-perl/vim-perl    php:StanAngeloff/php.vim    puppet:rodjek/vim-puppet +  powershell:Persistent13/vim-ps1    protobuf:uarun/vim-protobuf    python:mitsuhiko/vim-python-combined    r-lang:vim-scripts/R.vim diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index 4e194287..cc2d2e53 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -144,6 +144,10 @@ endfunction  autocmd BufReadPost *.pl,*.pm,*.t call s:DetectPerl6()  autocmd BufNew,BufRead *.nqp setf perl6  autocmd BufNewFile,BufRead *.proto setfiletype proto +au BufNewFile,BufRead   *.ps1   set ft=ps1 +au BufNewFile,BufRead   *.psd1  set ft=ps1 +au BufNewFile,BufRead   *.psm1  set ft=ps1 +au BufNewFile,BufRead   *.ps1xml   set ft=ps1xml  au! BufRead,BufNewFile *.pp setfiletype puppet  au! BufRead,BufNewFile Puppetfile setfiletype ruby  function! s:setf(filetype) abort diff --git a/ftplugin/ps1.vim b/ftplugin/ps1.vim new file mode 100644 index 00000000..ae81ccb5 --- /dev/null +++ b/ftplugin/ps1.vim @@ -0,0 +1,34 @@ +" Vim filetype plugin file +" Language:           Windows PowerShell +" Maintainer:         Peter Provost <peter@provost.org> +" Version:            2.10 +" Project Repository: https://github.com/PProvost/vim-ps1 +" Vim Script Page:    http://www.vim.org/scripts/script.php?script_id=1327 + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") | finish | endif + +" Don't load another plug-in for this buffer +let b:did_ftplugin = 1 + +setlocal tw=0 +setlocal commentstring=#%s +setlocal formatoptions=tcqro +" Enable autocompletion of hyphenated PowerShell commands, +" e.g. Get-Content or Get-ADUser +setlocal iskeyword+=- + +" Change the browse dialog on Win32 to show mainly PowerShell-related files +if has("gui_win32") +	let b:browsefilter = +				\ "All PowerShell Files (*.ps1, *.psd1, *.psm1, *.ps1xml)\t*.ps1;*.psd1;*.psm1;*.ps1xml\n" . +				\ "PowerShell Script Files (*.ps1)\t*.ps1\n" . +				\ "PowerShell Module Files (*.psd1, *.psm1)\t*.psd1;*.psm1\n" . +				\ "PowerShell XML Files (*.ps1xml)\t*.ps1xml\n" . +				\ "All Files (*.*)\t*.*\n" +endif + +" Undo the stuff we changed +let b:undo_ftplugin = "setlocal tw< cms< fo<" . +			\ " | unlet! b:browsefilter" + diff --git a/ftplugin/ps1xml.vim b/ftplugin/ps1xml.vim new file mode 100644 index 00000000..5f615c52 --- /dev/null +++ b/ftplugin/ps1xml.vim @@ -0,0 +1,31 @@ +" Vim filetype plugin file +" Language:           Windows PowerShell +" Maintainer:         Peter Provost <peter@provost.org> +" Version:            2.10 +" Project Repository: https://github.com/PProvost/vim-ps1 +" Vim Script Page:    http://www.vim.org/scripts/script.php?script_id=1327 + +" Only do this when not done yet for this buffer +if exists("b:did_ftplugin") | finish | endif + +" Don't load another plug-in for this buffer +let b:did_ftplugin = 1 + +setlocal tw=0 +setlocal commentstring=#%s +setlocal formatoptions=tcqro + +" Change the browse dialog on Win32 to show mainly PowerShell-related files +if has("gui_win32") +  let b:browsefilter =  +        \ "All PowerShell Files (*.ps1, *.psd1, *.psm1, *.ps1xml)\t*.ps1;*.psd1;*.psm1;*.ps1xml\n" . +        \ "PowerShell Script Files (*.ps1)\t*.ps1\n" . +        \ "PowerShell Module Files (*.psd1, *.psm1)\t*.psd1;*.psm1\n" . +        \ "PowerShell XML Files (*.ps1xml)\t*.ps1xml\n" . +        \ "All Files (*.*)\t*.*\n" +endif + +" Undo the stuff we changed +let b:undo_ftplugin = "setlocal tw< cms< fo<" . +      \ " | unlet! b:browsefilter" + diff --git a/indent/ps1.vim b/indent/ps1.vim new file mode 100644 index 00000000..8198a504 --- /dev/null +++ b/indent/ps1.vim @@ -0,0 +1,20 @@ +" Vim indent file +" Language:           Windows PowerShell +" Maintainer:         Peter Provost <peter@provost.org> +" Version:            2.10 +" Project Repository: https://github.com/PProvost/vim-ps1 +" Vim Script Page:    http://www.vim.org/scripts/script.php?script_id=1327" + +" Only load this indent file when no other was loaded. +if exists("b:did_indent") +	finish +endif +let b:did_indent = 1 + +" smartindent is good enough for powershell +setlocal smartindent +" disable the indent removal for # marks +inoremap # X# + +let b:undo_indent = "setl si<" + diff --git a/syntax/ps1.vim b/syntax/ps1.vim new file mode 100644 index 00000000..5d0a3f57 --- /dev/null +++ b/syntax/ps1.vim @@ -0,0 +1,162 @@ +" Vim syntax file +" Language:           Windows PowerShell +" Maintainer:         Peter Provost <peter@provost.org> +" Version:            2.10 +" Project Repository: https://github.com/PProvost/vim-ps1 +" Vim Script Page:    http://www.vim.org/scripts/script.php?script_id=1327" +" +" The following settings are available for tuning syntax highlighting: +"    let ps1_nofold_blocks = 1 +"    let ps1_nofold_sig = 1 + +" Compatible VIM syntax file start +if version < 600 +	syntax clear +elseif exists("b:current_syntax") +	finish +endif + +" 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,ps1Function + +" 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 +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 +\$_+ +syn match ps1Constant +\$\$+ +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 + +" Type declarations +syn match ps1Type /\[[a-z0-9_:.]\+\(\[\]\)\?\]/ +syn match ps1StandaloneType /[a-z0-9_.]\+/ contained +syn keyword ps1Scope global local private script contained + +" 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 + +" 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 + +" 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=/'/ + +" Here-Strings +syn region ps1String start=/@"$/ end=/^"@/ contains=@ps1StringSpecial +syn region ps1String start=/@'$/ end=/^'@/ + +" Interpolation +syn match ps1Escape /`./ contained +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 + +" 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\)\>" + +" Folding blocks +if !exists('g:ps1_nofold_blocks') +	syn region ps1Block start=/{/ end=/}/ transparent fold +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 +if version >= 508 || !exists("did_ps1_syn_inits") +	if version < 508 +		let did_ps1_syn_inits = 1 +		command -nargs=+ HiLink hi link <args> +	else +		command -nargs=+ HiLink hi def link <args> +	endif + +	HiLink ps1Number Number +	HiLink ps1Block Block +	HiLink ps1Exception Exception +	HiLink ps1Constant Constant +	HiLink ps1String String +	HiLink ps1Escape SpecialChar +	HiLink ps1InterpolationDelimiter Delimiter +	HiLink ps1Conditional Conditional +	HiLink ps1Function 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 ps1Comment Comment +	HiLink ps1CommentTodo Todo +	HiLink ps1CommentDoc Tag +	HiLink ps1CDocParam Todo +	HiLink ps1Operator Operator +	HiLink ps1Repeat Repeat +	HiLink ps1RepeatAndCmdlet Repeat +	HiLink ps1Keyword Keyword +	HiLink ps1KeywordAndCmdlet Keyword +	HiLink ps1Cmdlet Statement +	delcommand HiLink +endif + +let b:current_syntax = "ps1" + diff --git a/syntax/ps1xml.vim b/syntax/ps1xml.vim new file mode 100644 index 00000000..02407f55 --- /dev/null +++ b/syntax/ps1xml.vim @@ -0,0 +1,56 @@ +" Vim syntax file +" Language:           Windows PowerShell XML +" Maintainer:         Peter Provost <peter@provost.org> +" Version:            2.10 +" Project Repository: https://github.com/PProvost/vim-ps1 +" Vim Script Page:    http://www.vim.org/scripts/script.php?script_id=1327" + +" Compatible VIM syntax file start +if version < 600 +  syntax clear +elseif exists("b:current_syntax") +  finish +endif + +let s:ps1xml_cpo_save = &cpo +set cpo&vim + +doau syntax xml +unlet b:current_syntax + +syn case ignore +syn include @ps1xmlScriptBlock <sfile>:p:h/ps1.vim +unlet b:current_syntax + +syn region ps1xmlScriptBlock +      \ matchgroup=xmlTag     start="<Script>" +      \ matchgroup=xmlEndTag  end="</Script>" +      \ fold +      \ contains=@ps1xmlScriptBlock +      \ keepend +syn region ps1xmlScriptBlock +      \ matchgroup=xmlTag     start="<ScriptBlock>" +      \ matchgroup=xmlEndTag  end="</ScriptBlock>" +      \ fold +      \ contains=@ps1xmlScriptBlock +      \ keepend +syn region ps1xmlScriptBlock +      \ matchgroup=xmlTag     start="<GetScriptBlock>" +      \ matchgroup=xmlEndTag  end="</GetScriptBlock>" +      \ fold +      \ contains=@ps1xmlScriptBlock +      \ keepend +syn region ps1xmlScriptBlock +      \ matchgroup=xmlTag     start="<SetScriptBlock>" +      \ matchgroup=xmlEndTag  end="</SetScriptBlock>" +      \ fold +      \ contains=@ps1xmlScriptBlock +      \ keepend + +syn cluster xmlRegionHook add=ps1xmlScriptBlock + +let b:current_syntax = "ps1xml" + +let &cpo = s:ps1xml_cpo_save +unlet s:ps1xml_cpo_save + | 
