Mercurial > vim
annotate runtime/syntax/sh.vim @ 3634:286ba0251c0a v7.3.577
updated for version 7.3.577
Problem: Size of memory does not fit in 32 bit unsigned.
Solution: Use Kbyte instead of byte. Call GlobalMemoryStatusEx() instead of
GlobalMemoryStatus() when available.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Fri, 29 Jun 2012 15:51:30 +0200 |
parents | 2cfb68fa26cd |
children | c53344bacabf |
rev | line source |
---|---|
7 | 1 " Vim syntax file |
2 " Language: shell (sh) Korn shell (ksh) bash (sh) | |
3 " Maintainer: Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz> | |
4 " Previous Maintainer: Lennart Schultz <Lennart.Schultz@ecmwf.int> | |
3445 | 5 " Last Change: Mar 19, 2012 |
6 " Version: 122 | |
507 | 7 " URL: http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax |
1668 | 8 " For options and settings, please use: :help ft-sh-syntax |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
9 " This file includes many ideas from ?ric Brunet (eric.brunet@ens.fr) |
7 | 10 |
22 | 11 " For version 5.x: Clear all syntax items {{{1 |
7 | 12 " For version 6.x: Quit when a syntax file was already loaded |
13 if version < 600 | |
14 syntax clear | |
15 elseif exists("b:current_syntax") | |
16 finish | |
17 endif | |
18 | |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
19 " AFAICT "." should be considered part of the iskeyword. Using iskeywords in |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
20 " syntax is dicey, so the following code permits the user to prevent/override |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
21 " its setting. |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
22 if exists("g:sh_isk") " override support |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
23 exe "setlocal isk=".g:sh_isk |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
24 elseif !exists("g:sh_noisk") " prevent modification support |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
25 setlocal isk+=. |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
26 endif |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
27 |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
28 " trying to answer the question: which shell is /bin/sh, really? |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
29 if !exists("g:is_kornshell") && !exists("g:is_bash") && !exists("g:is_posix") && !exists("g:is_sh") |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
30 if executable("/bin/sh") |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
31 if resolve("/bin/sh") =~ 'bash$' |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
32 let g:is_bash= 1 |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
33 elseif resolve("/bin/sh") =~ 'ksh$' |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
34 let g:is_ksh = 1 |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
35 endif |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
36 elseif executable("/usr/bin/sh") |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
37 if resolve("/usr/bin//sh") =~ 'bash$' |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
38 let g:is_bash= 1 |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
39 elseif resolve("/usr/bin//sh") =~ 'ksh$' |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
40 let g:is_ksh = 1 |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
41 endif |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
42 endif |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
43 endif |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
44 |
22 | 45 " handling /bin/sh with is_kornshell/is_sh {{{1 |
7 | 46 " b:is_sh is set when "#! /bin/sh" is found; |
47 " However, it often is just a masquerade by bash (typically Linux) | |
48 " or kornshell (typically workstations with Posix "sh"). | |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
49 " So, when the user sets "g:is_bash", "g:is_kornshell", |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
50 " or "g:is_posix", a b:is_sh is converted into b:is_bash/b:is_kornshell, |
7 | 51 " respectively. |
52 if !exists("b:is_kornshell") && !exists("b:is_bash") | |
828 | 53 if exists("g:is_posix") && !exists("g:is_kornshell") |
54 let g:is_kornshell= g:is_posix | |
55 endif | |
56 if exists("g:is_kornshell") | |
7 | 57 let b:is_kornshell= 1 |
58 if exists("b:is_sh") | |
59 unlet b:is_sh | |
60 endif | |
828 | 61 elseif exists("g:is_bash") |
7 | 62 let b:is_bash= 1 |
63 if exists("b:is_sh") | |
64 unlet b:is_sh | |
65 endif | |
66 else | |
67 let b:is_sh= 1 | |
68 endif | |
69 endif | |
70 | |
199 | 71 " set up default g:sh_fold_enabled {{{1 |
7 | 72 if !exists("g:sh_fold_enabled") |
73 let g:sh_fold_enabled= 0 | |
36 | 74 elseif g:sh_fold_enabled != 0 && !has("folding") |
75 let g:sh_fold_enabled= 0 | |
199 | 76 echomsg "Ignoring g:sh_fold_enabled=".g:sh_fold_enabled."; need to re-compile vim for +fold support" |
77 endif | |
1668 | 78 if !exists("s:sh_fold_functions") |
79 let s:sh_fold_functions = 1 | |
80 endif | |
81 if !exists("s:sh_fold_heredoc") | |
82 let s:sh_fold_heredoc = 2 | |
83 endif | |
84 if !exists("s:sh_fold_ifdofor") | |
85 let s:sh_fold_ifdofor = 4 | |
86 endif | |
199 | 87 if g:sh_fold_enabled && &fdm == "manual" |
2152 | 88 setlocal fdm=syntax |
7 | 89 endif |
90 | |
199 | 91 " sh syntax is case sensitive {{{1 |
7 | 92 syn case match |
93 | |
22 | 94 " Clusters: contains=@... clusters {{{1 |
7 | 95 "================================== |
2034 | 96 syn cluster shErrorList contains=shDoError,shIfError,shInError,shCaseError,shEsacError,shCurlyError,shParenError,shTestError,shOK |
1668 | 97 if exists("b:is_kornshell") |
98 syn cluster ErrorList add=shDTestError | |
99 endif | |
2497 | 100 syn cluster shArithParenList contains=shArithmetic,shCaseEsac,shDeref,shDerefSimple,shEcho,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shExDoubleQuote,shRedir,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen,bashSpecialVariables,bashStatement |
1668 | 101 syn cluster shArithList contains=@shArithParenList,shParenError |
2034 | 102 syn cluster shCaseEsacList contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial,shCaseRange |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
103 syn cluster shCaseList contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq |
3281 | 104 "syn cluster shColonList contains=@shCaseList |
2497 | 105 syn cluster shCommandSubList contains=shArithmetic,shDeref,shDerefSimple,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shSingleQuote,shExDoubleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias,shTest,shCtrlSeq,shSpecial |
464 | 106 syn cluster shCurlyList contains=shNumber,shComma,shDeref,shDerefSimple,shDerefSpecial |
2497 | 107 syn cluster shDblQuoteList contains=shCommandSub,shDeref,shDerefSimple,shPosnParm,shCtrlSeq,shSpecial |
482 | 108 syn cluster shDerefList contains=shDeref,shDerefSimple,shDerefVar,shDerefSpecial,shDerefWordError,shDerefPPS |
7 | 109 syn cluster shDerefVarList contains=shDerefOp,shDerefVarArray,shDerefOpError |
2497 | 110 syn cluster shEchoList contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shExpr,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq,shEchoQuote |
111 syn cluster shExprList1 contains=shCharClass,shNumber,shOperator,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shDblBrace,shDeref,shDerefSimple,shCtrlSeq | |
119 | 112 syn cluster shExprList2 contains=@shExprList1,@shCaseList,shTest |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
113 syn cluster shFunctionList contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shOption,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq |
1201 | 114 if exists("b:is_kornshell") || exists("b:is_bash") |
1668 | 115 syn cluster shFunctionList add=shRepeat |
1201 | 116 syn cluster shFunctionList add=shDblBrace,shDblParen |
117 endif | |
7 | 118 syn cluster shHereBeginList contains=@shCommandSubList |
119 syn cluster shHereList contains=shBeginHere,shHerePayload | |
120 syn cluster shHereListDQ contains=shBeginHere,@shDblQuoteList,shHerePayload | |
2497 | 121 syn cluster shIdList contains=shCommandSub,shWrapLineOperator,shSetOption,shDeref,shDerefSimple,shRedir,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shCtrlSeq,shStringSpecial |
3281 | 122 syn cluster shIfList contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey,shFunctionOne,shFunctionTwo |
123 syn cluster shLoopList contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac,shTest,@shErrorList,shSet,shOption | |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
124 syn cluster shSubShList contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq,shOperator |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
125 syn cluster shTestList contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shExDoubleQuote,shDoubleQuote,shExpr,shNumber,shOperator,shExSingleQuote,shSingleQuote,shTestOpr,shTest,shCtrlSeq |
22 | 126 " Echo: {{{1 |
7 | 127 " ==== |
128 " This one is needed INSIDE a CommandSub, so that `echo bla` be correct | |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
129 syn region shEcho matchgroup=shStatement start="\<echo\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment |
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
130 syn region shEcho matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|()]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=@shEchoList skipwhite nextgroup=shQuickComment |
2034 | 131 syn match shEchoQuote contained '\%(\\\\\)*\\["`'()]' |
7 | 132 |
1668 | 133 " This must be after the strings, so that ... \" will be correct |
2497 | 134 syn region shEmbeddedEcho contained matchgroup=shStatement start="\<print\>" skip="\\$" matchgroup=shEchoDelim end="$" matchgroup=NONE end="[<>;&|`)]"me=e-1 end="\d[<>]"me=e-2 end="\s#"me=e-2 contains=shNumber,shExSingleQuote,shSingleQuote,shDeref,shDerefSimple,shSpecialVar,shOperator,shExDoubleQuote,shDoubleQuote,shCharClass,shCtrlSeq |
7 | 135 |
22 | 136 " Alias: {{{1 |
7 | 137 " ===== |
138 if exists("b:is_kornshell") || exists("b:is_bash") | |
139 syn match shStatement "\<alias\>" | |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
140 syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+\)\@=" skip="\\$" end="\>\|`" |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
141 syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+=\)\@=" skip="\\$" end="=" |
7 | 142 endif |
143 | |
22 | 144 " Error Codes: {{{1 |
145 " ============ | |
3281 | 146 if !exists("g:sh_no_error") |
147 syn match shDoError "\<done\>" | |
148 syn match shIfError "\<fi\>" | |
149 syn match shInError "\<in\>" | |
150 syn match shCaseError ";;" | |
151 syn match shEsacError "\<esac\>" | |
152 syn match shCurlyError "}" | |
153 syn match shParenError ")" | |
154 syn match shOK '\.\(done\|fi\|in\|esac\)' | |
155 if exists("b:is_kornshell") | |
156 syn match shDTestError "]]" | |
157 endif | |
158 syn match shTestError "]" | |
7 | 159 endif |
160 | |
1668 | 161 " Options: {{{1 |
22 | 162 " ==================== |
2357
d706822076b1
Updated sh and vim syntax files. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2152
diff
changeset
|
163 syn match shOption "\s\zs[-+][-_a-zA-Z0-9]\+\>" |
1668 | 164 syn match shOption "\s\zs--[^ \t$`'"|]\+" |
7 | 165 |
1201 | 166 " File Redirection Highlighted As Operators: {{{1 |
167 "=========================================== | |
168 syn match shRedir "\d\=>\(&[-0-9]\)\=" | |
169 syn match shRedir "\d\=>>-\=" | |
170 syn match shRedir "\d\=<\(&[-0-9]\)\=" | |
171 syn match shRedir "\d<<-\=" | |
172 | |
22 | 173 " Operators: {{{1 |
174 " ========== | |
1201 | 175 syn match shOperator "<<\|>>" contained |
1668 | 176 syn match shOperator "[!&;|]" contained |
177 syn match shOperator "\[[[^:]\|\]]" contained | |
7 | 178 syn match shOperator "!\==" skipwhite nextgroup=shPattern |
2497 | 179 syn match shPattern "\<\S\+\())\)\@=" contained contains=shExSingleQuote,shSingleQuote,shExDoubleQuote,shDoubleQuote,shDeref |
7 | 180 |
22 | 181 " Subshells: {{{1 |
182 " ========== | |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
183 syn region shExpr transparent matchgroup=shExprRegion start="{" end="}" contains=@shExprList2 nextgroup=shMoreSpecial |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
184 syn region shSubSh transparent matchgroup=shSubShRegion start="[^(]\zs(" end=")" contains=@shSubShList nextgroup=shMoreSpecial |
7 | 185 |
22 | 186 " Tests: {{{1 |
187 "======= | |
2152 | 188 syn region shExpr matchgroup=shRange start="\[" skip=+\\\\\|\\$\|\[+ end="\]" contains=@shTestList,shSpecial |
2034 | 189 syn region shTest transparent matchgroup=shStatement start="\<test\s" skip=+\\\\\|\\$+ matchgroup=NONE end="[;&|]"me=e-1 end="$" contains=@shExprList1 |
1121 | 190 syn match shTestOpr contained "<=\|>=\|!=\|==\|-.\>\|-\(nt\|ot\|ef\|eq\|ne\|lt\|le\|gt\|ge\)\>\|[!<>]" |
191 syn match shTestOpr contained '=' skipwhite nextgroup=shTestDoubleQuote,shTestSingleQuote,shTestPattern | |
192 syn match shTestPattern contained '\w\+' | |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
193 syn match shTestDoubleQuote contained '\%(\%(\\\\\)*\\\)\@<!"[^"]*"' |
1121 | 194 syn match shTestSingleQuote contained '\\.' |
195 syn match shTestSingleQuote contained "'[^']*'" | |
7 | 196 if exists("b:is_kornshell") || exists("b:is_bash") |
197 syn region shDblBrace matchgroup=Delimiter start="\[\[" skip=+\\\\\|\\$+ end="\]\]" contains=@shTestList | |
198 syn region shDblParen matchgroup=Delimiter start="((" skip=+\\\\\|\\$+ end="))" contains=@shTestList | |
199 endif | |
200 | |
22 | 201 " Character Class In Range: {{{1 |
202 " ========================= | |
7 | 203 syn match shCharClass contained "\[:\(backspace\|escape\|return\|xdigit\|alnum\|alpha\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|tab\):\]" |
204 | |
22 | 205 " Loops: do, if, while, until {{{1 |
206 " ====== | |
1668 | 207 if (g:sh_fold_enabled % (s:sh_fold_ifdofor * 2))/s:sh_fold_ifdofor |
820 | 208 syn region shDo fold transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList |
3281 | 209 syn region shIf fold transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>" contains=@shIfList |
1668 | 210 syn region shFor fold matchgroup=shLoop start="\<for\_s" end="\<in\_s" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn |
820 | 211 else |
212 syn region shDo transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList | |
3281 | 213 syn region shIf transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>" contains=@shIfList |
1668 | 214 syn region shFor matchgroup=shLoop start="\<for\_s" end="\<in\>" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn |
820 | 215 endif |
7 | 216 if exists("b:is_kornshell") || exists("b:is_bash") |
1668 | 217 syn cluster shCaseList add=shRepeat |
218 syn cluster shFunctionList add=shRepeat | |
219 syn region shRepeat matchgroup=shLoop start="\<while\_s" end="\<in\_s" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen,shDblBrace | |
220 syn region shRepeat matchgroup=shLoop start="\<until\_s" end="\<in\_s" end="\<do\>"me=e-2 contains=@shLoopList,shDblParen,shDblBrace | |
221 syn region shCaseEsac matchgroup=shConditional start="\<select\s" matchgroup=shConditional end="\<in\>" end="\<do\>" contains=@shLoopList | |
7 | 222 else |
1668 | 223 syn region shRepeat matchgroup=shLoop start="\<while\_s" end="\<do\>"me=e-2 contains=@shLoopList |
224 syn region shRepeat matchgroup=shLoop start="\<until\_s" end="\<do\>"me=e-2 contains=@shLoopList | |
7 | 225 endif |
464 | 226 syn region shCurlyIn contained matchgroup=Delimiter start="{" end="}" contains=@shCurlyList |
227 syn match shComma contained "," | |
7 | 228 |
22 | 229 " Case: case...esac {{{1 |
7 | 230 " ==== |
1668 | 231 syn match shCaseBar contained skipwhite "\(^\|[^\\]\)\(\\\\\)*\zs|" nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote |
7 | 232 syn match shCaseStart contained skipwhite skipnl "(" nextgroup=shCase,shCaseBar |
1668 | 233 if (g:sh_fold_enabled % (s:sh_fold_ifdofor * 2))/s:sh_fold_ifdofor |
2034 | 234 syn region shCase fold contained skipwhite skipnl matchgroup=shSnglCase start="\%(\\.\|[^#$()'" \t]\)\{-}\zs)" end=";;" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,shComment |
820 | 235 syn region shCaseEsac fold matchgroup=shConditional start="\<case\>" end="\<esac\>" contains=@shCaseEsacList |
236 else | |
2034 | 237 syn region shCase contained skipwhite skipnl matchgroup=shSnglCase start="\%(\\.\|[^#$()'" \t]\)\{-}\zs)" end=";;" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,shComment |
820 | 238 syn region shCaseEsac matchgroup=shConditional start="\<case\>" end="\<esac\>" contains=@shCaseEsacList |
239 endif | |
167 | 240 syn keyword shCaseIn contained skipwhite skipnl in nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote |
241 if exists("b:is_bash") | |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
242 syn region shCaseExSingleQuote matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial,shSpecial skipwhite skipnl nextgroup=shCaseBar contained |
3281 | 243 elseif !exists("g:sh_no_error") |
167 | 244 syn region shCaseExSingleQuote matchgroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial skipwhite skipnl nextgroup=shCaseBar contained |
245 endif | |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
246 syn region shCaseSingleQuote matchgroup=shQuote start=+'+ end=+'+ contains=shStringSpecial skipwhite skipnl nextgroup=shCaseBar contained |
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
247 syn region shCaseDoubleQuote matchgroup=shQuote start=+"+ skip=+\\\\\|\\.+ end=+"+ contains=@shDblQuoteList,shStringSpecial skipwhite skipnl nextgroup=shCaseBar contained |
7 | 248 syn region shCaseCommandSub start=+`+ skip=+\\\\\|\\.+ end=+`+ contains=@shCommandSubList skipwhite skipnl nextgroup=shCaseBar contained |
2034 | 249 syn region shCaseRange matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+]+ contained |
7 | 250 |
22 | 251 " Misc: {{{1 |
252 "====== | |
7 | 253 syn match shWrapLineOperator "\\$" |
254 syn region shCommandSub start="`" skip="\\\\\|\\." end="`" contains=@shCommandSubList | |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
255 syn match shEscape contained '\\.' contains=@shCommandSubList |
7 | 256 |
22 | 257 " $() and $(()): {{{1 |
7 | 258 " $(..) is not supported by sh (Bourne shell). However, apparently |
259 " some systems (HP?) have as their /bin/sh a (link to) Korn shell | |
260 " (ie. Posix compliant shell). /bin/ksh should work for those | |
261 " systems too, however, so the following syntax will flag $(..) as | |
262 " an Error under /bin/sh. By consensus of vimdev'ers! | |
263 if exists("b:is_kornshell") || exists("b:is_bash") | |
264 syn region shCommandSub matchgroup=shCmdSubRegion start="\$(" skip='\\\\\|\\.' end=")" contains=@shCommandSubList | |
1668 | 265 syn region shArithmetic matchgroup=shArithRegion start="\$((" skip='\\\\\|\\.' end="))" contains=@shArithList |
3445 | 266 syn region shArithmetic matchgroup=shArithRegion start="\$\[" skip='\\\\\|\\.' end="\]" contains=@shArithList |
7 | 267 syn match shSkipInitWS contained "^\s\+" |
3281 | 268 elseif !exists("g:sh_no_error") |
167 | 269 syn region shCommandSub matchgroup=Error start="\$(" end=")" contains=@shCommandSubList |
7 | 270 endif |
271 | |
272 if exists("b:is_bash") | |
273 syn cluster shCommandSubList add=bashSpecialVariables,bashStatement | |
274 syn cluster shCaseList add=bashAdminStatement,bashStatement | |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
275 syn keyword bashSpecialVariables contained auto_resume BASH BASH_ALIASES BASH_ALIASES BASH_ARGC BASH_ARGC BASH_ARGV BASH_ARGV BASH_CMDS BASH_CMDS BASH_COMMAND BASH_COMMAND BASH_ENV BASH_EXECUTION_STRING BASH_EXECUTION_STRING BASH_LINENO BASH_LINENO BASHOPTS BASHOPTS BASHPID BASHPID BASH_REMATCH BASH_REMATCH BASH_SOURCE BASH_SOURCE BASH_SUBSHELL BASH_SUBSHELL BASH_VERSINFO BASH_VERSION BASH_XTRACEFD BASH_XTRACEFD CDPATH COLUMNS COLUMNS COMP_CWORD COMP_CWORD COMP_KEY COMP_KEY COMP_LINE COMP_LINE COMP_POINT COMP_POINT COMPREPLY COMPREPLY COMP_TYPE COMP_TYPE COMP_WORDBREAKS COMP_WORDBREAKS COMP_WORDS COMP_WORDS COPROC COPROC DIRSTACK EMACS EMACS ENV ENV EUID FCEDIT FIGNORE FUNCNAME FUNCNAME FUNCNEST FUNCNEST GLOBIGNORE GROUPS histchars HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HISTTIMEFORMAT HISTTIMEFORMAT HOME HOSTFILE HOSTNAME HOSTTYPE IFS IGNOREEOF INPUTRC LANG LC_ALL LC_COLLATE LC_CTYPE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_NUMERIC LINENO LINES LINES MACHTYPE MAIL MAILCHECK MAILPATH MAPFILE MAPFILE OLDPWD OPTARG OPTERR OPTIND OSTYPE PATH PIPESTATUS POSIXLY_CORRECT POSIXLY_CORRECT PPID PROMPT_COMMAND PS1 PS2 PS3 PS4 PWD RANDOM READLINE_LINE READLINE_LINE READLINE_POINT READLINE_POINT REPLY SECONDS SHELL SHELL SHELLOPTS SHLVL TIMEFORMAT TIMEOUT TMPDIR TMPDIR UID |
7 | 276 syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep install less ls mkdir mv rm rmdir rpm sed sleep sort strip tail touch |
277 syn keyword bashAdminStatement daemon killall killproc nice reload restart start status stop | |
278 endif | |
279 | |
280 if exists("b:is_kornshell") | |
281 syn cluster shCommandSubList add=kshSpecialVariables,kshStatement | |
282 syn cluster shCaseList add=kshStatement | |
283 syn keyword kshSpecialVariables contained CDPATH COLUMNS EDITOR ENV ERRNO FCEDIT FPATH HISTFILE HISTSIZE HOME IFS LINENO LINES MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTIND PATH PPID PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELL TMOUT VISUAL | |
284 syn keyword kshStatement cat chmod clear cp du egrep expr fgrep find grep install killall less ls mkdir mv nice printenv rm rmdir sed sort strip stty tail touch tput | |
285 endif | |
286 | |
287 syn match shSource "^\.\s" | |
288 syn match shSource "\s\.\s" | |
2034 | 289 "syn region shColon start="^\s*:" end="$" end="\s#"me=e-2 contains=@shColonList |
3281 | 290 "syn region shColon start="^\s*\zs:" end="$" end="\s#"me=e-2 |
291 syn match shColon '^\s*\zs:' | |
7 | 292 |
22 | 293 " String And Character Constants: {{{1 |
294 "================================ | |
1121 | 295 syn match shNumber "-\=\<\d\+\>#\=" |
296 syn match shCtrlSeq "\\\d\d\d\|\\[abcfnrtv0]" contained | |
167 | 297 if exists("b:is_bash") |
2034 | 298 syn match shSpecial "\\\o\o\o\|\\x\x\x\|\\c[^"]\|\\[abefnrtv]" contained |
167 | 299 endif |
300 if exists("b:is_bash") | |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
301 syn region shExSingleQuote matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial,shSpecial |
2497 | 302 syn region shExDoubleQuote matchgroup=shQuote start=+\$"+ skip=+\\\\\|\\.\|\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,shSpecial |
3281 | 303 elseif !exists("g:sh_no_error") |
1121 | 304 syn region shExSingleQuote matchGroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+ contains=shStringSpecial |
2497 | 305 syn region shExDoubleQuote matchGroup=Error start=+\$"+ skip=+\\\\\|\\.+ end=+"+ contains=shStringSpecial |
167 | 306 endif |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
307 syn region shSingleQuote matchgroup=shQuote start=+'+ end=+'+ contains=@Spell |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
308 syn region shDoubleQuote matchgroup=shQuote start=+\%(\%(\\\\\)*\\\)\@<!"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,@Spell |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
309 "syn region shDoubleQuote matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial,@Spell |
1698 | 310 syn match shStringSpecial "[^[:print:] \t]" contained |
1201 | 311 syn match shStringSpecial "\%(\\\\\)*\\[\\"'`$()#]" |
2034 | 312 syn match shSpecial "[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial |
1201 | 313 syn match shSpecial "^\%(\\\\\)*\\[\\"'`$()#]" |
2034 | 314 syn match shMoreSpecial "\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial contained |
7 | 315 |
22 | 316 " Comments: {{{1 |
317 "========== | |
2034 | 318 syn cluster shCommentGroup contains=shTodo,@Spell |
319 syn keyword shTodo contained COMBAK FIXME TODO XXX | |
320 syn match shComment "^\s*\zs#.*$" contains=@shCommentGroup | |
321 syn match shComment "\s\zs#.*$" contains=@shCommentGroup | |
322 syn match shQuickComment contained "#.*$" | |
7 | 323 |
22 | 324 " Here Documents: {{{1 |
325 " ========================================= | |
7 | 326 if version < 600 |
327 syn region shHereDoc matchgroup=shRedir start="<<\s*\**END[a-zA-Z_0-9]*\**" matchgroup=shRedir end="^END[a-zA-Z_0-9]*$" contains=@shDblQuoteList | |
328 syn region shHereDoc matchgroup=shRedir start="<<-\s*\**END[a-zA-Z_0-9]*\**" matchgroup=shRedir end="^\s*END[a-zA-Z_0-9]*$" contains=@shDblQuoteList | |
329 syn region shHereDoc matchgroup=shRedir start="<<\s*\**EOF\**" matchgroup=shRedir end="^EOF$" contains=@shDblQuoteList | |
330 syn region shHereDoc matchgroup=shRedir start="<<-\s*\**EOF\**" matchgroup=shRedir end="^\s*EOF$" contains=@shDblQuoteList | |
331 syn region shHereDoc matchgroup=shRedir start="<<\s*\**\.\**" matchgroup=shRedir end="^\.$" contains=@shDblQuoteList | |
332 syn region shHereDoc matchgroup=shRedir start="<<-\s*\**\.\**" matchgroup=shRedir end="^\s*\.$" contains=@shDblQuoteList | |
333 | |
1668 | 334 elseif (g:sh_fold_enabled % (s:sh_fold_heredoc * 2))/s:sh_fold_heredoc |
1121 | 335 syn region shHereDoc matchgroup=shRedir fold start="<<\s*\z(\S*\)" matchgroup=shRedir end="^\z1\s*$" contains=@shDblQuoteList |
199 | 336 syn region shHereDoc matchgroup=shRedir fold start="<<\s*\"\z(\S*\)\"" matchgroup=shRedir end="^\z1\s*$" |
337 syn region shHereDoc matchgroup=shRedir fold start="<<\s*'\z(\S*\)'" matchgroup=shRedir end="^\z1\s*$" | |
338 syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\z(\S*\)" matchgroup=shRedir end="^\s*\z1\s*$" contains=@shDblQuoteList | |
339 syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\"\z(\S*\)\"" matchgroup=shRedir end="^\s*\z1\s*$" | |
340 syn region shHereDoc matchgroup=shRedir fold start="<<-\s*'\z(\S*\)'" matchgroup=shRedir end="^\s*\z1\s*$" | |
341 syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*\z(\S*\)" matchgroup=shRedir end="^\z1\s*$" | |
342 syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*\"\z(\S*\)\"" matchgroup=shRedir end="^\z1\s*$" | |
343 syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*'\z(\S*\)'" matchgroup=shRedir end="^\s*\z1\s*$" | |
344 syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\z(\S*\)" matchgroup=shRedir end="^\s*\z1\s*$" | |
345 syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\"\z(\S*\)\"" matchgroup=shRedir end="^\s*\z1\s*$" | |
346 syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*'\z(\S*\)'" matchgroup=shRedir end="^\z1\s*$" | |
1121 | 347 syn region shHereDoc matchgroup=shRedir fold start="<<\\\z(\S*\)" matchgroup=shRedir end="^\z1\s*$" |
7 | 348 |
349 else | |
199 | 350 syn region shHereDoc matchgroup=shRedir start="<<\s*\\\=\z(\S*\)" matchgroup=shRedir end="^\z1\s*$" contains=@shDblQuoteList |
351 syn region shHereDoc matchgroup=shRedir start="<<\s*\"\z(\S*\)\"" matchgroup=shRedir end="^\z1\s*$" | |
352 syn region shHereDoc matchgroup=shRedir start="<<-\s*\z(\S*\)" matchgroup=shRedir end="^\s*\z1\s*$" contains=@shDblQuoteList | |
353 syn region shHereDoc matchgroup=shRedir start="<<-\s*'\z(\S*\)'" matchgroup=shRedir end="^\s*\z1\s*$" | |
354 syn region shHereDoc matchgroup=shRedir start="<<\s*'\z(\S*\)'" matchgroup=shRedir end="^\z1\s*$" | |
355 syn region shHereDoc matchgroup=shRedir start="<<-\s*\"\z(\S*\)\"" matchgroup=shRedir end="^\s*\z1\s*$" | |
356 syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\z(\S*\)" matchgroup=shRedir end="^\z1\s*$" | |
357 syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\z(\S*\)" matchgroup=shRedir end="^\s*\z1\s*$" | |
358 syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*'\z(\S*\)'" matchgroup=shRedir end="^\s*\z1\s*$" | |
359 syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*'\z(\S*\)'" matchgroup=shRedir end="^\z1\s*$" | |
360 syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\"\z(\S*\)\"" matchgroup=shRedir end="^\z1\s*$" | |
361 syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\"\z(\S*\)\"" matchgroup=shRedir end="^\s*\z1\s*$" | |
1121 | 362 syn region shHereDoc matchgroup=shRedir start="<<\\\z(\S*\)" matchgroup=shRedir end="^\z1\s*$" |
7 | 363 endif |
364 | |
22 | 365 " Here Strings: {{{1 |
366 " ============= | |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
367 " available for: bash; ksh (really should be ksh93 only) but not if its a posix |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
368 if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("g:is_posix")) |
22 | 369 syn match shRedir "<<<" |
370 endif | |
371 | |
372 " Identifiers: {{{1 | |
373 "============= | |
1668 | 374 syn match shSetOption "\s\zs[-+][a-zA-Z0-9]\+\>" contained |
375 syn match shVariable "\<\([bwglsav]:\)\=[a-zA-Z0-9.!@_%+,]*\ze=" nextgroup=shSetIdentifier | |
2497 | 376 syn match shSetIdentifier "=" contained nextgroup=shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote |
7 | 377 if exists("b:is_bash") |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
378 syn region shSetList oneline matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+#\|=" contains=@shIdList |
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
379 syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="\ze[;|)]\|$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList |
7 | 380 elseif exists("b:is_kornshell") |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
381 syn region shSetList oneline matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList |
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
382 syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList |
7 | 383 else |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
384 syn region shSetList oneline matchgroup=shSet start="\<\(set\|export\|unset\)\>\ze[^/]" end="$" matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList |
7 | 385 endif |
386 | |
22 | 387 " Functions: {{{1 |
1668 | 388 if !exists("g:is_posix") |
389 syn keyword shFunctionKey function skipwhite skipnl nextgroup=shFunctionTwo | |
390 endif | |
391 | |
392 if exists("b:is_bash") | |
393 if (g:sh_fold_enabled % (s:sh_fold_functions * 2))/s:sh_fold_functions | |
394 syn region shFunctionOne fold matchgroup=shFunction start="^\s*\h[-a-zA-Z_0-9]*\s*()\_s*{" end="}" contains=@shFunctionList skipwhite skipnl nextgroup=shFunctionStart,shQuickComment | |
395 syn region shFunctionTwo fold matchgroup=shFunction start="\h[-a-zA-Z_0-9]*\s*\%(()\)\=\_s*{" end="}" contains=shFunctionKey,@shFunctionList contained skipwhite skipnl nextgroup=shFunctionStart,shQuickComment | |
396 else | |
397 syn region shFunctionOne matchgroup=shFunction start="^\s*\h[-a-zA-Z_0-9]*\s*()\_s*{" end="}" contains=@shFunctionList | |
398 syn region shFunctionTwo matchgroup=shFunction start="\h[-a-zA-Z_0-9]*\s*\%(()\)\=\_s*{" end="}" contains=shFunctionKey,@shFunctionList contained | |
399 endif | |
7 | 400 else |
1668 | 401 if (g:sh_fold_enabled % (s:sh_fold_functions * 2))/s:sh_fold_functions |
402 syn region shFunctionOne fold matchgroup=shFunction start="^\s*\h\w*\s*()\_s*{" end="}" contains=@shFunctionList skipwhite skipnl nextgroup=shFunctionStart,shQuickComment | |
403 syn region shFunctionTwo fold matchgroup=shFunction start="\h\w*\s*\%(()\)\=\_s*{" end="}" contains=shFunctionKey,@shFunctionList contained skipwhite skipnl nextgroup=shFunctionStart,shQuickComment | |
404 else | |
405 syn region shFunctionOne matchgroup=shFunction start="^\s*\h\w*\s*()\_s*{" end="}" contains=@shFunctionList | |
406 syn region shFunctionTwo matchgroup=shFunction start="\h\w*\s*\%(()\)\=\_s*{" end="}" contains=shFunctionKey,@shFunctionList contained | |
407 endif | |
7 | 408 endif |
409 | |
22 | 410 " Parameter Dereferencing: {{{1 |
411 " ======================== | |
36 | 412 syn match shDerefSimple "\$\%(\h\w*\|\d\)" |
7 | 413 syn region shDeref matchgroup=PreProc start="\${" end="}" contains=@shDerefList,shDerefVarArray |
3281 | 414 if !exists("g:sh_no_error") |
415 syn match shDerefWordError "[^}$[]" contained | |
416 endif | |
7 | 417 syn match shDerefSimple "\$[-#*@!?]" |
418 syn match shDerefSimple "\$\$" | |
419 if exists("b:is_bash") || exists("b:is_kornshell") | |
420 syn region shDeref matchgroup=PreProc start="\${##\=" end="}" contains=@shDerefList | |
1668 | 421 syn region shDeref matchgroup=PreProc start="\${\$\$" end="}" contains=@shDerefList |
7 | 422 endif |
423 | |
22 | 424 " bash: ${!prefix*} and ${#parameter}: {{{1 |
425 " ==================================== | |
7 | 426 if exists("b:is_bash") |
427 syn region shDeref matchgroup=PreProc start="\${!" end="\*\=}" contains=@shDerefList,shDerefOp | |
428 syn match shDerefVar contained "{\@<=!\w\+" nextgroup=@shDerefVarList | |
429 endif | |
430 | |
431 syn match shDerefSpecial contained "{\@<=[-*@?0]" nextgroup=shDerefOp,shDerefOpError | |
432 syn match shDerefSpecial contained "\({[#!]\)\@<=[[:alnum:]*@_]\+" nextgroup=@shDerefVarList,shDerefOp | |
433 syn match shDerefVar contained "{\@<=\w\+" nextgroup=@shDerefVarList | |
434 | |
22 | 435 " sh ksh bash : ${var[... ]...} array reference: {{{1 |
7 | 436 syn region shDerefVarArray contained matchgroup=shDeref start="\[" end="]" contains=@shCommandSubList nextgroup=shDerefOp,shDerefOpError |
437 | |
22 | 438 " Special ${parameter OPERATOR word} handling: {{{1 |
7 | 439 " sh ksh bash : ${parameter:-word} word is default value |
440 " sh ksh bash : ${parameter:=word} assign word as default value | |
441 " sh ksh bash : ${parameter:?word} display word if parameter is null | |
442 " sh ksh bash : ${parameter:+word} use word if parameter is not null, otherwise nothing | |
443 " ksh bash : ${parameter#pattern} remove small left pattern | |
444 " ksh bash : ${parameter##pattern} remove large left pattern | |
445 " ksh bash : ${parameter%pattern} remove small right pattern | |
446 " ksh bash : ${parameter%%pattern} remove large right pattern | |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
447 " bash : ${parameter^pattern} Case modification |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
448 " bash : ${parameter^^pattern} Case modification |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
449 " bash : ${parameter,pattern} Case modification |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
450 " bash : ${parameter,,pattern} Case modification |
7 | 451 syn cluster shDerefPatternList contains=shDerefPattern,shDerefString |
3281 | 452 if !exists("g:sh_no_error") |
453 syn match shDerefOpError contained ":[[:punct:]]" | |
454 endif | |
7 | 455 syn match shDerefOp contained ":\=[-=?]" nextgroup=@shDerefPatternList |
456 syn match shDerefOp contained ":\=+" nextgroup=@shDerefPatternList | |
457 if exists("b:is_bash") || exists("b:is_kornshell") | |
458 syn match shDerefOp contained "#\{1,2}" nextgroup=@shDerefPatternList | |
459 syn match shDerefOp contained "%\{1,2}" nextgroup=@shDerefPatternList | |
482 | 460 syn match shDerefPattern contained "[^{}]\+" contains=shDeref,shDerefSimple,shDerefPattern,shDerefString,shCommandSub,shDerefEscape nextgroup=shDerefPattern |
7 | 461 syn region shDerefPattern contained start="{" end="}" contains=shDeref,shDerefSimple,shDerefString,shCommandSub nextgroup=shDerefPattern |
482 | 462 syn match shDerefEscape contained '\%(\\\\\)*\\.' |
7 | 463 endif |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
464 if exists("b:is_bash") |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
465 syn match shDerefOp contained "[,^]\{1,2}" nextgroup=@shDerefPatternList |
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
466 endif |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
467 syn region shDerefString contained matchgroup=shDerefDelim start=+\%(\\\)\@<!'+ end=+'+ contains=shStringSpecial |
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
468 syn region shDerefString contained matchgroup=shDerefDelim start=+\%(\\\)\@<!"+ skip=+\\"+ end=+"+ contains=@shDblQuoteList,shStringSpecial |
1668 | 469 syn match shDerefString contained "\\["']" nextgroup=shDerefPattern |
7 | 470 |
471 if exists("b:is_bash") | |
482 | 472 " bash : ${parameter:offset} |
473 " bash : ${parameter:offset:length} | |
7 | 474 syn region shDerefOp contained start=":[$[:alnum:]_]"me=e-1 end=":"me=e-1 end="}"me=e-1 contains=@shCommandSubList nextgroup=shDerefPOL |
482 | 475 syn match shDerefPOL contained ":[^}]\+" contains=@shCommandSubList |
476 | |
477 " bash : ${parameter//pattern/string} | |
478 " bash : ${parameter//pattern} | |
479 syn match shDerefPPS contained '/\{1,2}' nextgroup=shDerefPPSleft | |
557 | 480 syn region shDerefPPSleft contained start='.' skip=@\%(\\\)\/@ matchgroup=shDerefOp end='/' end='\ze}' nextgroup=shDerefPPSright contains=@shCommandSubList |
482 | 481 syn region shDerefPPSright contained start='.' end='\ze}' contains=@shCommandSubList |
7 | 482 endif |
483 | |
1668 | 484 " Arithmetic Parenthesized Expressions: {{{1 |
3099
887d6d91882e
Updated a few runtime files.
Bram Moolenaar <bram@vim.org>
parents:
2751
diff
changeset
|
485 syn region shParen matchgroup=shArithRegion start='(\%(\ze[^(]\|$\)' end=')' contains=@shArithParenList |
1668 | 486 |
22 | 487 " Useful sh Keywords: {{{1 |
488 " =================== | |
7 | 489 syn keyword shStatement break cd chdir continue eval exec exit kill newgrp pwd read readonly return shift test trap ulimit umask wait |
490 syn keyword shConditional contained elif else then | |
3281 | 491 if !exists("g:sh_no_error") |
492 syn keyword shCondError elif else then | |
493 endif | |
7 | 494 |
22 | 495 " Useful ksh Keywords: {{{1 |
496 " ==================== | |
7 | 497 if exists("b:is_kornshell") || exists("b:is_bash") |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
498 syn keyword shStatement autoload bg false fc fg functions getopts hash history integer jobs let nohup printf r stop suspend times true type unalias whence |
1668 | 499 if exists("g:is_posix") |
500 syn keyword shStatement command | |
501 else | |
502 syn keyword shStatement time | |
503 endif | |
7 | 504 |
22 | 505 " Useful bash Keywords: {{{1 |
506 " ===================== | |
7 | 507 if exists("b:is_bash") |
508 syn keyword shStatement bind builtin dirs disown enable help local logout popd pushd shopt source | |
509 else | |
510 syn keyword shStatement login newgrp | |
511 endif | |
512 endif | |
513 | |
22 | 514 " Synchronization: {{{1 |
515 " ================ | |
7 | 516 if !exists("sh_minlines") |
517 let sh_minlines = 200 | |
518 endif | |
519 if !exists("sh_maxlines") | |
520 let sh_maxlines = 2 * sh_minlines | |
521 endif | |
522 exec "syn sync minlines=" . sh_minlines . " maxlines=" . sh_maxlines | |
523 syn sync match shCaseEsacSync grouphere shCaseEsac "\<case\>" | |
524 syn sync match shCaseEsacSync groupthere shCaseEsac "\<esac\>" | |
525 syn sync match shDoSync grouphere shDo "\<do\>" | |
526 syn sync match shDoSync groupthere shDo "\<done\>" | |
527 syn sync match shForSync grouphere shFor "\<for\>" | |
528 syn sync match shForSync groupthere shFor "\<in\>" | |
529 syn sync match shIfSync grouphere shIf "\<if\>" | |
530 syn sync match shIfSync groupthere shIf "\<fi\>" | |
531 syn sync match shUntilSync grouphere shRepeat "\<until\>" | |
532 syn sync match shWhileSync grouphere shRepeat "\<while\>" | |
533 | |
22 | 534 " Default Highlighting: {{{1 |
535 " ===================== | |
7 | 536 hi def link shArithRegion shShellVariables |
167 | 537 hi def link shBeginHere shRedir |
7 | 538 hi def link shCaseBar shConditional |
539 hi def link shCaseCommandSub shCommandSub | |
540 hi def link shCaseDoubleQuote shDoubleQuote | |
167 | 541 hi def link shCaseIn shConditional |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
542 hi def link shQuote shOperator |
7 | 543 hi def link shCaseSingleQuote shSingleQuote |
544 hi def link shCaseStart shConditional | |
545 hi def link shCmdSubRegion shShellVariables | |
2034 | 546 hi def link shColon shComment |
167 | 547 hi def link shDerefOp shOperator |
548 hi def link shDerefPOL shDerefOp | |
482 | 549 hi def link shDerefPPS shDerefOp |
7 | 550 hi def link shDeref shShellVariables |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
551 hi def link shDerefDelim shOperator |
7 | 552 hi def link shDerefSimple shDeref |
553 hi def link shDerefSpecial shDeref | |
554 hi def link shDerefString shDoubleQuote | |
167 | 555 hi def link shDerefVar shDeref |
7 | 556 hi def link shDoubleQuote shString |
557 hi def link shEcho shString | |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
558 hi def link shEchoDelim shOperator |
1668 | 559 hi def link shEchoQuote shString |
7 | 560 hi def link shEmbeddedEcho shString |
1668 | 561 hi def link shEscape shCommandSub |
2497 | 562 hi def link shExDoubleQuote shDoubleQuote |
167 | 563 hi def link shExSingleQuote shSingleQuote |
1668 | 564 hi def link shFunction Function |
7 | 565 hi def link shHereDoc shString |
167 | 566 hi def link shHerePayload shHereDoc |
7 | 567 hi def link shLoop shStatement |
2034 | 568 hi def link shMoreSpecial shSpecial |
7 | 569 hi def link shOption shCommandSub |
570 hi def link shPattern shString | |
1668 | 571 hi def link shParen shArithmetic |
7 | 572 hi def link shPosnParm shShellVariables |
1668 | 573 hi def link shQuickComment shComment |
7 | 574 hi def link shRange shOperator |
575 hi def link shRedir shOperator | |
2473
d55e70cabe2c
Syntax file updates. (Charles Campbell)
Bram Moolenaar <bram@vim.org>
parents:
2357
diff
changeset
|
576 hi def link shSetListDelim shOperator |
1668 | 577 hi def link shSetOption shOption |
7 | 578 hi def link shSingleQuote shString |
579 hi def link shSource shOperator | |
580 hi def link shStringSpecial shSpecial | |
581 hi def link shSubShRegion shOperator | |
582 hi def link shTestOpr shConditional | |
1121 | 583 hi def link shTestPattern shString |
584 hi def link shTestDoubleQuote shString | |
585 hi def link shTestSingleQuote shString | |
7 | 586 hi def link shVariable shSetList |
587 hi def link shWrapLineOperator shOperator | |
588 | |
589 if exists("b:is_bash") | |
590 hi def link bashAdminStatement shStatement | |
591 hi def link bashSpecialVariables shShellVariables | |
592 hi def link bashStatement shStatement | |
199 | 593 hi def link shFunctionParen Delimiter |
594 hi def link shFunctionDelim Delimiter | |
7 | 595 endif |
596 if exists("b:is_kornshell") | |
597 hi def link kshSpecialVariables shShellVariables | |
598 hi def link kshStatement shStatement | |
199 | 599 hi def link shFunctionParen Delimiter |
7 | 600 endif |
601 | |
3281 | 602 if !exists("g:sh_no_error") |
603 hi def link shCaseError Error | |
604 hi def link shCondError Error | |
605 hi def link shCurlyError Error | |
606 hi def link shDerefError Error | |
607 hi def link shDerefOpError Error | |
608 hi def link shDerefWordError Error | |
609 hi def link shDoError Error | |
610 hi def link shEsacError Error | |
611 hi def link shIfError Error | |
612 hi def link shInError Error | |
613 hi def link shParenError Error | |
614 hi def link shTestError Error | |
615 if exists("b:is_kornshell") | |
616 hi def link shDTestError Error | |
617 endif | |
7 | 618 endif |
619 | |
620 hi def link shArithmetic Special | |
621 hi def link shCharClass Identifier | |
622 hi def link shSnglCase Statement | |
623 hi def link shCommandSub Special | |
624 hi def link shComment Comment | |
625 hi def link shConditional Conditional | |
1121 | 626 hi def link shCtrlSeq Special |
7 | 627 hi def link shExprRegion Delimiter |
199 | 628 hi def link shFunctionKey Function |
7 | 629 hi def link shFunctionName Function |
630 hi def link shNumber Number | |
631 hi def link shOperator Operator | |
632 hi def link shRepeat Repeat | |
633 hi def link shSet Statement | |
634 hi def link shSetList Identifier | |
635 hi def link shShellVariables PreProc | |
636 hi def link shSpecial Special | |
637 hi def link shStatement Statement | |
638 hi def link shString String | |
639 hi def link shTodo Todo | |
640 hi def link shAlias Identifier | |
641 | |
22 | 642 " Set Current Syntax: {{{1 |
643 " =================== | |
7 | 644 if exists("b:is_bash") |
645 let b:current_syntax = "bash" | |
646 elseif exists("b:is_kornshell") | |
647 let b:current_syntax = "ksh" | |
648 else | |
649 let b:current_syntax = "sh" | |
650 endif | |
651 | |
22 | 652 " vim: ts=16 fdm=marker |