summaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
Diffstat (limited to 'etc')
-rw-r--r--etc/vim/syntax/zsh.vim213
1 files changed, 213 insertions, 0 deletions
diff --git a/etc/vim/syntax/zsh.vim b/etc/vim/syntax/zsh.vim
new file mode 100644
index 0000000..dc12bf1
--- /dev/null
+++ b/etc/vim/syntax/zsh.vim
@@ -0,0 +1,213 @@
+" Vim syntax file
+" Language: Zsh shell script
+" Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2008-07-17
+
+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 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 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 1
+ 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