mirror of
				https://github.com/vim/vim.git
				synced 2025-11-03 09:44:48 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			214 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			VimL
		
	
	
	
	
	
" Vim syntax file
 | 
						|
" Language:         Zsh shell script
 | 
						|
" Maintainer:       Nikolai Weibull <now@bitwi.se>
 | 
						|
" Latest Revision:  2010-01-23
 | 
						|
 | 
						|
if exists("b:current_syntax")
 | 
						|
  finish
 | 
						|
endif
 | 
						|
 | 
						|
let s:cpo_save = &cpo
 | 
						|
set cpo&vim
 | 
						|
 | 
						|
setlocal iskeyword+=-
 | 
						|
 | 
						|
syn keyword zshTodo             contained TODO FIXME XXX NOTE
 | 
						|
 | 
						|
syn region  zshComment          oneline start='\%(^\|\s\)#' end='$'
 | 
						|
                                \ contains=zshTodo,@Spell
 | 
						|
 | 
						|
syn match   zshPreProc          '^\%1l#\%(!\|compdef\|autoload\).*$'
 | 
						|
 | 
						|
syn match   zshQuoted           '\\.'
 | 
						|
syn region  zshString           matchgroup=zshStringDelimiter start=+"+ end=+"+
 | 
						|
                                \ contains=zshQuoted,@zshDerefs,@zshSubst
 | 
						|
syn region  zshString           matchgroup=zshStringDelimiter start=+'+ end=+'+
 | 
						|
" XXX: This should probably be more precise, but Zsh seems a bit confused about it itself
 | 
						|
syn region  zshPOSIXString      matchgroup=zshStringDelimiter start=+\$'+
 | 
						|
                                \ end=+'+ contains=zshQuoted
 | 
						|
syn match   zshJobSpec          '%\(\d\+\|?\=\w\+\|[%+-]\)'
 | 
						|
 | 
						|
syn keyword zshPrecommand       noglob nocorrect exec command builtin - time
 | 
						|
 | 
						|
syn keyword zshDelimiter        do done
 | 
						|
 | 
						|
syn keyword zshConditional      if then elif else fi case in esac select
 | 
						|
 | 
						|
syn keyword zshRepeat           while until repeat
 | 
						|
 | 
						|
syn keyword zshRepeat           for foreach nextgroup=zshVariable skipwhite
 | 
						|
 | 
						|
syn keyword zshException        always
 | 
						|
 | 
						|
syn keyword zshKeyword          function nextgroup=zshKSHFunction skipwhite
 | 
						|
 | 
						|
syn match   zshKSHFunction      contained '\k\+'
 | 
						|
syn match   zshFunction         '^\s*\k\+\ze\s*()'
 | 
						|
 | 
						|
syn match   zshOperator         '||\|&&\|;\|&!\='
 | 
						|
 | 
						|
syn match   zshRedir            '\d\=\(<\|<>\|<<<\|<&\s*[0-9p-]\=\)'
 | 
						|
syn match   zshRedir            '\d\=\(>\|>>\|>&\s*[0-9p-]\=\|&>\|>>&\|&>>\)[|!]\='
 | 
						|
syn match   zshRedir            '|&\='
 | 
						|
 | 
						|
syn region  zshHereDoc          matchgroup=zshRedir
 | 
						|
                                \ start='<\@<!<<\s*\z([^<]\S*\)'
 | 
						|
                                \ end='^\z1\>'
 | 
						|
                                \ contains=@zshSubst
 | 
						|
syn region  zshHereDoc          matchgroup=zshRedir
 | 
						|
                                \ start='<\@<!<<\s*\\\z(\S\+\)'
 | 
						|
                                \ end='^\z1\>'
 | 
						|
                                \ contains=@zshSubst
 | 
						|
syn region  zshHereDoc          matchgroup=zshRedir
 | 
						|
                                \ start='<\@<!<<-\s*\\\=\z(\S\+\)'
 | 
						|
                                \ end='^\s*\z1\>'
 | 
						|
                                \ contains=@zshSubst
 | 
						|
syn region  zshHereDoc          matchgroup=zshRedir
 | 
						|
                                \ start=+<\@<!<<\s*\(["']\)\z(\S\+\)\1+ 
 | 
						|
                                \ end='^\z1\>'
 | 
						|
syn region  zshHereDoc          matchgroup=zshRedir
 | 
						|
                                \ start=+<\@<!<<-\s*\(["']\)\z(\S\+\)\1+
 | 
						|
                                \ end='^\s*\z1\>'
 | 
						|
 | 
						|
syn match   zshVariable         '\<\h\w*' contained
 | 
						|
 | 
						|
syn match   zshVariableDef      '\<\h\w*\ze+\=='
 | 
						|
" XXX: how safe is this?
 | 
						|
syn region  zshVariableDef      oneline
 | 
						|
                                \ start='\$\@<!\<\h\w*\[' end='\]\ze+\=='
 | 
						|
                                \ contains=@zshSubst
 | 
						|
 | 
						|
syn cluster zshDerefs           contains=zshShortDeref,zshLongDeref,zshDeref
 | 
						|
 | 
						|
if !exists("g:zsh_syntax_variables")
 | 
						|
  let s:zsh_syntax_variables = 'all'
 | 
						|
else
 | 
						|
  let s:zsh_syntax_variables = g:zsh_syntax_variables
 | 
						|
endif
 | 
						|
 | 
						|
if s:zsh_syntax_variables =~ 'short\|all'
 | 
						|
  syn match zshShortDeref       '\$[!#$*@?_-]\w\@!'
 | 
						|
  syn match zshShortDeref       '\$[=^~]*[#+]*\d\+\>'
 | 
						|
endif
 | 
						|
 | 
						|
if s:zsh_syntax_variables =~ 'long\|all'
 | 
						|
  syn match zshLongDeref        '\$\%(ARGC\|argv\|status\|pipestatus\|CPUTYPE\|EGID\|EUID\|ERRNO\|GID\|HOST\|LINENO\|LOGNAME\)'
 | 
						|
  syn match zshLongDeref        '\$\%(MACHTYPE\|OLDPWD OPTARG\|OPTIND\|OSTYPE\|PPID\|PWD\|RANDOM\|SECONDS\|SHLVL\|signals\)'
 | 
						|
  syn match zshLongDeref        '\$\%(TRY_BLOCK_ERROR\|TTY\|TTYIDLE\|UID\|USERNAME\|VENDOR\|ZSH_NAME\|ZSH_VERSION\|REPLY\|reply\|TERM\)'
 | 
						|
endif
 | 
						|
 | 
						|
if s:zsh_syntax_variables =~ 'all'
 | 
						|
  syn match zshDeref            '\$[=^~]*[#+]*\h\w*\>'
 | 
						|
else
 | 
						|
  syn match zshDeref            transparent contains=NONE '\$[=^~]*[#+]*\h\w*\>'
 | 
						|
endif
 | 
						|
 | 
						|
syn match   zshCommands         '\%(^\|\s\)[.:]\ze\s'
 | 
						|
syn keyword zshCommands         alias autoload bg bindkey break bye cap cd
 | 
						|
                                \ chdir clone comparguments compcall compctl
 | 
						|
                                \ compdescribe compfiles compgroups compquote
 | 
						|
                                \ comptags comptry compvalues continue dirs
 | 
						|
                                \ disable disown echo echotc echoti emulate
 | 
						|
                                \ enable eval exec exit export false fc fg
 | 
						|
                                \ functions getcap getln getopts hash history
 | 
						|
                                \ jobs kill let limit log logout popd print
 | 
						|
                                \ printf pushd pushln pwd r read readonly
 | 
						|
                                \ rehash return sched set setcap setopt shift
 | 
						|
                                \ source stat suspend test times trap true
 | 
						|
                                \ ttyctl type ulimit umask unalias unfunction
 | 
						|
                                \ unhash unlimit unset unsetopt vared wait
 | 
						|
                                \ whence where which zcompile zformat zftp zle
 | 
						|
                                \ zmodload zparseopts zprof zpty zregexparse
 | 
						|
                                \ zsocket zstyle ztcp
 | 
						|
 | 
						|
syn keyword zshTypes            float integer local typeset declare
 | 
						|
 | 
						|
" XXX: this may be too much
 | 
						|
" syn match   zshSwitches         '\s\zs--\=[a-zA-Z0-9-]\+'
 | 
						|
 | 
						|
syn match   zshNumber           '[+-]\=\<\d\+\>'
 | 
						|
syn match   zshNumber           '[+-]\=\<0x\x\+\>'
 | 
						|
syn match   zshNumber           '[+-]\=\<0\o\+\>'
 | 
						|
syn match   zshNumber           '[+-]\=\d\+#[-+]\=\w\+\>'
 | 
						|
syn match   zshNumber           '[+-]\=\d\+\.\d\+\>'
 | 
						|
 | 
						|
" TODO: $[...] is the same as $((...)), so add that as well.
 | 
						|
syn cluster zshSubst            contains=zshSubst,zshOldSubst,zshMathSubst
 | 
						|
syn region  zshSubst            matchgroup=zshSubstDelim transparent
 | 
						|
                                \ start='\$(' skip='\\)' end=')' contains=TOP
 | 
						|
syn region  zshParentheses      transparent start='(' skip='\\)' end=')'
 | 
						|
syn region  zshMathSubst        matchgroup=zshSubstDelim transparent
 | 
						|
                                \ start='\$((' skip='\\)'
 | 
						|
                                \ matchgroup=zshSubstDelim end='))'
 | 
						|
                                \ contains=zshParentheses,@zshSubst,zshNumber,
 | 
						|
                                \ @zshDerefs,zshString
 | 
						|
syn region  zshBrackets         contained transparent start='{' skip='\\}'
 | 
						|
                                \ end='}'
 | 
						|
syn region  zshSubst            matchgroup=zshSubstDelim start='\${' skip='\\}'
 | 
						|
                                \ end='}' contains=@zshSubst,zshBrackets,zshQuoted,zshString
 | 
						|
syn region  zshOldSubst         matchgroup=zshSubstDelim start=+`+ skip=+\\`+
 | 
						|
                                \ end=+`+ contains=TOP,zshOldSubst
 | 
						|
 | 
						|
syn sync    minlines=50
 | 
						|
syn sync    match zshHereDocSync    grouphere   NONE '<<-\=\s*\%(\\\=\S\+\|\(["']\)\S\+\1\)'
 | 
						|
syn sync    match zshHereDocEndSync groupthere  NONE '^\s*EO\a\+\>'
 | 
						|
 | 
						|
hi def link zshTodo             Todo
 | 
						|
hi def link zshComment          Comment
 | 
						|
hi def link zshPreProc          PreProc
 | 
						|
hi def link zshQuoted           SpecialChar
 | 
						|
hi def link zshString           String
 | 
						|
hi def link zshStringDelimiter  zshString
 | 
						|
hi def link zshPOSIXString      zshString
 | 
						|
hi def link zshJobSpec          Special
 | 
						|
hi def link zshPrecommand       Special
 | 
						|
hi def link zshDelimiter        Keyword
 | 
						|
hi def link zshConditional      Conditional
 | 
						|
hi def link zshException        Exception
 | 
						|
hi def link zshRepeat           Repeat
 | 
						|
hi def link zshKeyword          Keyword
 | 
						|
hi def link zshFunction         None
 | 
						|
hi def link zshKSHFunction      zshFunction
 | 
						|
hi def link zshHereDoc          String
 | 
						|
if 0
 | 
						|
  hi def link zshOperator         Operator
 | 
						|
else
 | 
						|
  hi def link zshOperator         None
 | 
						|
endif
 | 
						|
if 1
 | 
						|
  hi def link zshRedir            Operator
 | 
						|
else
 | 
						|
  hi def link zshRedir            None
 | 
						|
endif
 | 
						|
hi def link zshVariable         None
 | 
						|
hi def link zshVariableDef      zshVariable
 | 
						|
hi def link zshDereferencing    PreProc
 | 
						|
if s:zsh_syntax_variables =~ 'short\|all'
 | 
						|
  hi def link zshShortDeref     zshDereferencing
 | 
						|
else
 | 
						|
  hi def link zshShortDeref     None
 | 
						|
endif
 | 
						|
if s:zsh_syntax_variables =~ 'long\|all'
 | 
						|
  hi def link zshLongDeref      zshDereferencing
 | 
						|
else
 | 
						|
  hi def link zshLongDeref      None
 | 
						|
endif
 | 
						|
if s:zsh_syntax_variables =~ 'all'
 | 
						|
  hi def link zshDeref          zshDereferencing
 | 
						|
else
 | 
						|
  hi def link zshDeref          None
 | 
						|
endif
 | 
						|
hi def link zshCommands         Keyword
 | 
						|
hi def link zshTypes            Type
 | 
						|
hi def link zshSwitches         Special
 | 
						|
hi def link zshNumber           Number
 | 
						|
hi def link zshSubst            PreProc
 | 
						|
hi def link zshMathSubst        zshSubst
 | 
						|
hi def link zshOldSubst         zshSubst
 | 
						|
hi def link zshSubstDelim       zshSubst
 | 
						|
 | 
						|
let b:current_syntax = "zsh"
 | 
						|
 | 
						|
let &cpo = s:cpo_save
 | 
						|
unlet s:cpo_save
 |