blob: ba209e9940e56a20f8b22665f1b4c1872b0bb032 (
plain) (
tree)
|
|
" If we know we have another shell type, clear away the others completely, now
" that core syntax/sh.vim is done prodding /bin/sh to determine the system
" shell type (which I don't care about).
if exists('b:is_bash')
unlet! b:is_sh b:is_posix b:is_kornshell
elseif exists('b:is_kornshell')
unlet! b:is_sh b:is_posix
elseif exists('b:is_posix')
unlet! b:is_sh
endif
" The syntax highlighter seems to flag '/baz' in '"${foo:-"$bar"/baz}"' as an
" error, which it isn't, at least in POSIX sh, Bash, and Ksh.
syntax clear shDerefWordError
" The syntax highlighter doesn't match parens for subshells for 'if' tests
" correctly if they're on separate lines. This happens enough that it's
" probably not worth keeping the error.
syntax clear shParenError
" Highlighting corrections specific to POSIX mode
if exists('b:is_posix')
" Highlight some commands that are both defined by POSIX and builtin
" commands in dash, as a rough but useable proxy for 'shell builtins'. This
" list was mostly wrested from `man 1 dash`. Also include control structure
" keywords like `break`, `continue`, and `return`.
syntax clear shStatement
syntax cluster shCommandSubList add=shStatement
syntax cluster shCaseList add=shStatement
syntax keyword shStatement
\ alias
\ bg
\ break
\ cd
\ command
\ continue
\ echo
\ eval
\ exec
\ exit
\ export
\ fc
\ fg
\ getopts
\ hash
\ kill
\ printf
\ pwd
\ read
\ readonly
\ return
\ set
\ shift
\ test
\ times
\ trap
\ true
\ type
\ ulimit
\ umask
\ unalias
\ unset
\ wait
" Core syntax/sh.vim puts IFS and other variables that affect shell function
" in another color, but a subset of them actually apply to POSIX shell too
" (and plain Bourne). These are selected by searching the POSIX manpages. I
" added NLSPATH too, which wasn't in the original.
syntax clear shShellVariables
syntax cluster shCommandSubList add=shShellVariables
syntax keyword shShellVariables
\ CDPATH
\ ENV
\ FCEDIT
\ HISTFILE
\ HISTSIZE
\ HISTTIMEFORMAT
\ HOME
\ IFS
\ LANG
\ LC_ALL
\ LC_COLLATE
\ LC_CTYPE
\ LC_MESSAGES
\ LC_NUMERIC
\ LINENO
\ MAIL
\ MAILCHECK
\ MAILPATH
\ NLSPATH
\ OLDPWD
\ OPTARG
\ OPTERR
\ OPTIND
\ PATH
\ PS1
\ PS2
\ PS3
\ PS4
\ PWD
endif
" Some corrections for highlighting specific to the Bash mode
if exists('b:is_bash')
" I don't like bashAdminStatement; these are not keywords, they're just
" strings for init scripts.
syntax clear bashAdminStatement
" Reduce bashStatement down to just builtins; highlighting 'grep' is not
" very useful. This list was taken from `compgen -A helptopic` on Bash
" 4.4.5.
syntax clear bashStatement
syntax keyword bashStatement
\ .
\ :
\ alias
\ bg
\ bind
\ break
\ builtin
\ caller
\ cd
\ command
\ compgen
\ complete
\ compopt
\ continue
\ coproc
\ dirs
\ disown
\ echo
\ enable
\ eval
\ exec
\ exit
\ false
\ fc
\ fg
\ function
\ getopts
\ hash
\ help
\ history
\ jobs
\ kill
\ let
\ logout
\ mapfile
\ popd
\ printf
\ pushd
\ pwd
\ read
\ readarray
\ readonly
\ return
\ select
\ set
\ shift
\ shopt
\ source
\ suspend
\ test
\ time
\ times
\ trap
\ true
\ type
\ ulimit
\ umask
\ unalias
\ until
\ variables
\ wait
endif
|