summaryrefslogtreecommitdiff
path: root/runtime/syntax/zsh.vim
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2007-05-05 18:24:42 +0000
committerBram Moolenaar <Bram@vim.org>2007-05-05 18:24:42 +0000
commitc81e5e79a0f2f5c2ac1896fa51cbe47e2e2a8d97 (patch)
tree5211ea86daed8e43c3dd25458e808c3d32100097 /runtime/syntax/zsh.vim
parent9aae141a6bcfc26bcce352deb8bf34566a3e1be2 (diff)
downloadvim-git-c81e5e79a0f2f5c2ac1896fa51cbe47e2e2a8d97.tar.gz
updated for version 7.1a
Diffstat (limited to 'runtime/syntax/zsh.vim')
-rw-r--r--runtime/syntax/zsh.vim296
1 files changed, 186 insertions, 110 deletions
diff --git a/runtime/syntax/zsh.vim b/runtime/syntax/zsh.vim
index 83763a627..761e3ac02 100644
--- a/runtime/syntax/zsh.vim
+++ b/runtime/syntax/zsh.vim
@@ -1,118 +1,194 @@
" Vim syntax file
-" Language: Z shell (zsh)
-" Maintainer: Felix von Leitner <leitner@math.fu-berlin.de>
-" Heavily based on sh.vim by Lennart Schultz
-" Last Change: 2003 May 11
-
-" For version 5.x: Clear all syntax items
-" For version 6.x: Quit when a syntax file was already loaded
-if version < 600
- syntax clear
-elseif exists("b:current_syntax")
+" Language: Zsh shell script
+" Maintainer: Nikolai Weibull <now@bitwi.se>
+" Latest Revision: 2006-08-06
+
+if exists("b:current_syntax")
finish
endif
-" String and Character contstants
-" Highlight special characters (those which have a backslash) differently
-syn match zshSpecial "\\\d\d\d\|\\[abcfnrtv\\']"
-syn region zshSinglequote start=+'+ skip=+\\'+ end=+'+
-" A bunch of useful zsh keywords
-" syn keyword zshFunction function
-syn keyword zshStatement bg break cd chdir continue echo eval exec
-syn keyword zshStatement exit export fg getopts hash jobs kill
-syn keyword zshStatement pwd read readonly return set zshift function
-syn keyword zshStatement stop suspend test times trap type ulimit
-syn keyword zshStatement umask unset wait setopt compctl source
-syn keyword zshStatement whence disown shift which unhash unalias
-syn keyword zshStatement alias functions unfunction getln disable
-syn keyword zshStatement vared getopt enable unsetopt autoload
-syn keyword zshStatement bindkey pushln command limit unlimit fc
-syn keyword zshStatement print builtin noglob sched r time
-syn keyword zshStatement typeset declare local integer
-
-syn keyword zshConditional if else esac case then elif fi in
-syn keyword zshRepeat while for do done
-
-" Following is worth to notice: command substitution, file redirection and functions (so these features turns red)
-syn match zshFunctionName "\h\w*\s*()"
-syn region zshCommandSub start=+`+ skip=+\\`+ end=+`+
-" contains=ALLBUT,zshFunction
-syn match zshRedir "\d\=\(<\|<<\|>\|>>\)\(|\|&\d\)\="
-
-syn keyword zshTodo contained TODO
-
-syn keyword zshShellVariables USER LOGNAME HOME PATH CDPATH SHELL
-syn keyword zshShellVariables LC_TYPE LC_MESSAGE MAIL MAILCHECK
-syn keyword zshShellVariables PS1 PS2 IFS EGID EUID ERRNO GID UID
-syn keyword zshShellVariables HOST LINENO MACHTYPE OLDPWD OPTARG
-syn keyword zshShellVariables OPTIND OSTYPE PPID PWD RANDOM SECONDS
-syn keyword zshShellVariables SHLVL TTY signals TTYIDLE USERNAME
-syn keyword zshShellVariables VENDOR ZSH_NAME ZSH_VERSION ARGV0
-syn keyword zshShellVariables BAUD COLUMNS cdpath DIRSTACKSIZE
-syn keyword zshShellVariables FCEDIT fignore fpath histchars HISTCHARS
-syn keyword zshShellVariables HISTFILE HISTSIZE KEYTIMEOUT LANG
-syn keyword zshShellVariables LC_ALL LC_COLLATE LC_CTYPE LC_MESSAGES
-syn keyword zshShellVariables LC_TIME LINES LISTMAX LOGCHECK mailpath
-syn keyword zshShellVariables MAILPATH MANPATH manpath module_path
-syn keyword zshShellVariables MODULE_PATH NULLCMD path POSTEDIT
-syn keyword zshShellVariables PS3 PS4 PROMPT PROMPT2 PROMPT3 PROMPT4
-syn keyword zshShellVariables psvar PSVAR prompt READNULLCMD
-syn keyword zshShellVariables REPORTTIME RPROMPT RPS1 SAVEHIST
-syn keyword zshShellVariables SPROMPT STTY TIMEFMT TMOUT TMPPREFIX
-syn keyword zshShellVariables watch WATCH WATCHFMT WORDCHARS ZDOTDIR
-syn match zshSpecialShellVar "\$[-#@*$?!0-9]"
-syn keyword zshSetVariables ignoreeof noclobber
-syn region zshDerefOpr start="\${" end="}" contains=zshShellVariables
-syn match zshDerefIdentifier "\$[a-zA-Z_][a-zA-Z0-9_]*\>"
-syn match zshOperator "[][}{&;|)(]"
-
-
-
-syn match zshNumber "-\=\<\d\+\>"
-syn match zshComment "#.*$" contains=zshNumber,zshTodo
-
-
-syn match zshTestOpr "-\<[oeaznlg][tfqet]\=\>\|!\==\|-\<[b-gkLprsStuwjxOG]\>"
-"syn region zshTest start="\[" skip="\\$" end="\]" contains=zshString,zshTestOpr,zshDerefIdentifier,zshDerefOpr
-syn region zshString start=+"+ skip=+\\"+ end=+"+ contains=zshSpecial,zshOperator,zshDerefIdentifier,zshDerefOpr,zshSpecialShellVar,zshSinglequote,zshCommandSub
-
-" Define the default highlighting.
-" For version 5.7 and earlier: only when not done already
-" For version 5.8 and later: only when an item doesn't have highlighting yet
-if version >= 508 || !exists("did_zsh_syntax_inits")
- if version < 508
- let did_zsh_syntax_inits = 1
- command -nargs=+ HiLink hi link <args>
- else
- command -nargs=+ HiLink hi def link <args>
- endif
-
- HiLink zshSinglequote zshString
- HiLink zshConditional zshStatement
- HiLink zshRepeat zshStatement
- HiLink zshFunctionName zshFunction
- HiLink zshCommandSub zshOperator
- HiLink zshRedir zshOperator
- HiLink zshSetVariables zshShellVariables
- HiLink zshSpecialShellVar zshShellVariables
- HiLink zshTestOpr zshOperator
- HiLink zshDerefOpr zshSpecial
- HiLink zshDerefIdentifier zshShellVariables
- HiLink zshOperator Operator
- HiLink zshStatement Statement
- HiLink zshNumber Number
- HiLink zshString String
- HiLink zshComment Comment
- HiLink zshSpecial Special
- HiLink zshTodo Todo
- HiLink zshShellVariables Special
-" hi zshOperator term=underline ctermfg=6 guifg=Purple gui=bold
-" hi zshShellVariables term=underline ctermfg=2 guifg=SeaGreen gui=bold
-" hi zshFunction term=bold ctermbg=1 guifg=Red
-
- delcommand HiLink
+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"
-" vim: ts=8
+let &cpo = s:cpo_save
+unlet s:cpo_save