Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/vim71/syntax/zsh.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim71/syntax/zsh.vim')
-rw-r--r--vim71/syntax/zsh.vim194
1 files changed, 194 insertions, 0 deletions
diff --git a/vim71/syntax/zsh.vim b/vim71/syntax/zsh.vim
new file mode 100644
index 0000000..761e3ac
--- /dev/null
+++ b/vim71/syntax/zsh.vim
@@ -0,0 +1,194 @@
+" Vim syntax file
+" Language: Zsh shell script
+" Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2006-08-06
+
+if exists("b:current_syntax")
+ finish
+endif
+
+let s:cpo_save = &cpo
+set cpo&vim
+
+setlocal iskeyword=@,48-57,_,-
+
+syn keyword zshTodo contained TODO FIXME XXX NOTE
+
+syn region zshComment display 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 for while until repeat foreach
+
+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='^\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*\ze+\=='
+" XXX: how safe is this?
+syn region zshVariable 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 '\$[=^~]*[#+]*\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\+\>'
+
+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
+syn region zshOldSubst matchgroup=zshSubstDelim start=+`+ skip=+\\`+
+ \ end=+`+ contains=TOP,zshOldSubst
+
+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 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