diff options
author | Bram Moolenaar <Bram@vim.org> | 2007-05-05 18:24:42 +0000 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2007-05-05 18:24:42 +0000 |
commit | c81e5e79a0f2f5c2ac1896fa51cbe47e2e2a8d97 (patch) | |
tree | 5211ea86daed8e43c3dd25458e808c3d32100097 /runtime/syntax/zsh.vim | |
parent | 9aae141a6bcfc26bcce352deb8bf34566a3e1be2 (diff) | |
download | vim-git-c81e5e79a0f2f5c2ac1896fa51cbe47e2e2a8d97.tar.gz |
updated for version 7.1a
Diffstat (limited to 'runtime/syntax/zsh.vim')
-rw-r--r-- | runtime/syntax/zsh.vim | 296 |
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 |