comparison runtime/syntax/fish.vim @ 32004:a9b5ffbc0428

Update runtime files. Commit: https://github.com/vim/vim/commit/938ae280c79b8cdb0fca60336ec4c090ecd8bb5a Author: Bram Moolenaar <Bram@vim.org> Date: Mon Feb 20 20:44:55 2023 +0000 Update runtime files.
author Bram Moolenaar <Bram@vim.org>
date Mon, 20 Feb 2023 22:00:05 +0100
parents
children
comparison
equal deleted inserted replaced
32003:aa9c0f0ebfd0 32004:a9b5ffbc0428
1 " Vim syntax file
2 " Language: fish
3 " Maintainer: Nicholas Boyle (github.com/nickeb96)
4 " Repository: https://github.com/nickeb96/fish.vim
5 " Last Change: February 1, 2023
6
7 if exists("b:current_syntax")
8 finish
9 endif
10
11 let s:cpo_save = &cpo
12 set cpo&vim
13
14
15 " Statements
16 syn cluster fishStatement contains=fishKeywordAndOr,fishNot,fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand,fishVariable
17
18 syn keyword fishKeywordAndOr and or nextgroup=fishNot,fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand
19 hi def link fishKeywordAndOr fishOperator
20
21 syn keyword fishNot not skipwhite nextgroup=fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand
22 syn match fishNot /!/ skipwhite nextgroup=fishSelectStatement,fishKeyword,fishKeywordIf,fishCommand
23 hi def link fishNot fishOperator
24
25 syn keyword fishSelectStatement command builtin skipwhite nextgroup=fishKeyword,fishKeywordIf,fishCommand,fishOption
26 hi def link fishSelectStatement fishKeyword
27
28 syn keyword fishKeyword end skipwhite nextgroup=@fishTerminator
29
30 syn keyword fishKeywordIf if skipwhite nextgroup=@fishStatement
31 syn keyword fishKeyword else skipwhite nextgroup=fishKeywordIf,fishSemicolon
32 hi def link fishKeywordIf fishKeyword
33
34 syn keyword fishKeyword switch skipwhite nextgroup=@fishArgument
35 syn keyword fishKeyword case skipwhite nextgroup=@fishArgument
36
37 syn keyword fishKeyword while skipwhite nextgroup=@fishStatement
38
39 syn keyword fishKeyword for skipwhite nextgroup=fishForVariable
40 syn match fishForVariable /[[:alnum:]_]\+/ contained skipwhite nextgroup=fishKeywordIn
41 syn keyword fishKeywordIn in contained skipwhite nextgroup=@fishArgument
42 hi def link fishForVariable fishParameter
43 hi def link fishKeywordIn fishKeyword
44
45 syn keyword fishKeyword _ abbr argparse begin bg bind block break breakpoint cd commandline
46 \ complete continue count disown echo emit eval exec exit false fg function functions
47 \ history jobs math printf pwd random read realpath return set set_color source status
48 \ string test time true type ulimit wait
49 \ skipwhite nextgroup=@fishNext
50 syn match fishKeyword /\<contains\>/ skipwhite nextgroup=@fishNext
51
52 syn match fishCommand /[[:alnum:]_\/[][[:alnum:]+._-]*/ skipwhite nextgroup=@fishNext
53
54
55 " Internally Nested Arguments
56
57 syn cluster fishSubscriptArgs contains=fishInnerVariable,fishIndexNum,fishIndexRange,fishInnerCommandSub
58
59 syn match fishInnerVariable /\$\+[[:alnum:]_]\+/ contained
60 syn match fishInnerVariable /\$\+[[:alnum:]_]\+\[/me=e-1,he=e-1 contained nextgroup=fishInnerSubscript
61 hi def link fishInnerVariable fishVariable
62
63 syn region fishInnerSubscript matchgroup=fishVariable start=/\[/ end=/]/ contained
64 \ keepend contains=@fishSubscriptArgs
65 hi def link fishInnerSubscript fishSubscript
66
67 syn match fishIndexNum /[+-]?[[:digit:]]\+/ contained
68 hi def link fishIndexNum fishParameter
69
70 syn match fishIndexRange /\.\./ contained
71 hi def link fishIndexRange fishParameter
72
73 syn region fishInnerCommandSub matchgroup=fishOperator start=/(/ start=/\$(/ end=/)/ contained
74 \ contains=@fishStatement
75 hi def link fishInnerCommandSub fishCommandSub
76
77 syn region fishQuotedCommandSub matchgroup=fishOperator start=/\$(/ end=/)/ contained
78 \ contains=@fishStatement
79 hi def link fishQuotedCommandSub fishCommandSub
80
81 syn match fishBraceExpansionComma /,/ contained
82 hi def link fishBraceExpansionComma fishOperator
83
84 syn match fishBracedParameter '[[:alnum:]\u5b\u5d@:=+.%/!_-]\+' contained contains=fishInnerPathGlob
85 hi def link fishBracedParameter fishParameter
86
87 syn region fishBracedQuote start=/'/ skip=/\\'/ end=/'/ contained
88 \ contains=fishEscapedEscape,fishEscapedSQuote
89 syn region fishBracedQuote start=/"/ skip=/\\"/ end=/"/ contained
90 \ contains=fishEscapedEscape,fishEscapedDQuote,fishEscapedDollar,fishInnerVariable,fishInnerCommandSub
91 hi def link fishBracedQuote fishQuote
92
93
94 " Arguments
95
96 syn cluster fishArgument contains=fishParameter,fishOption,fishVariable,fishPathGlob,fishBraceExpansion,fishQuote,fishCharacter,fishCommandSub,fishRedirection,fishSelfPid
97
98 syn match fishParameter '[[:alnum:]\u5b\u5d@:=+.,%/!_-]\+' contained skipwhite nextgroup=@fishNext
99
100 syn match fishOption /-[[:alnum:]=_-]*/ contained skipwhite nextgroup=@fishNext
101
102 syn match fishPathGlob /\(\~\|*\|?\)/ contained skipwhite nextgroup=@fishNext
103
104 syn region fishBraceExpansion matchgroup=fishOperator start=/{/ end=/}/ contained
105 \ contains=fishBraceExpansionComma,fishInnerVariable,fishInnerCommandSub,fishBracedParameter,fishBracedQuote
106 \ skipwhite nextgroup=@fishNext
107
108 syn match fishVariable /\$\+[[:alnum:]_]\+/ skipwhite nextgroup=@fishNext
109 syn match fishVariable /\$\+[[:alnum:]_]\+\[/me=e-1,he=e-1 nextgroup=fishSubscript
110
111 syn region fishSubscript matchgroup=fishVariable start=/\[/ end=/]/ contained
112 \ keepend contains=@fishSubscriptArgs
113 \ skipwhite nextgroup=@fishNext
114
115 syn region fishCommandSub matchgroup=fishOperator start=/(/ start=/\$(/ end=/)/ contained
116 \ contains=@fishStatement
117 \ skipwhite nextgroup=@fishNext
118
119 syn region fishQuote start=/'/ skip=/\\'/ end=/'/ contained
120 \ contains=fishEscapedEscape,fishEscapedSQuote
121 \ skipwhite nextgroup=@fishNext
122 syn region fishQuote start=/"/ skip=/\\"/ end=/"/ contained
123 \ contains=fishEscapedEscape,fishEscapedDQuote,fishEscapedDollar,fishInnerVariable,fishQuotedCommandSub
124 \ skipwhite nextgroup=@fishNext
125
126 syn match fishEscapedEscape /\\\\/ contained
127 syn match fishEscapedSQuote /\\'/ contained
128 syn match fishEscapedDQuote /\\"/ contained
129 syn match fishEscapedDollar /\\\$/ contained
130 hi def link fishEscapedEscape fishCharacter
131 hi def link fishEscapedSQuote fishCharacter
132 hi def link fishEscapedDQuote fishCharacter
133 hi def link fishEscapedDollar fishCharacter
134
135 syn match fishCharacter /\\[0-7]\{1,3}/ contained skipwhite nextgroup=@fishNext
136 syn match fishCharacter /\\u[0-9a-fA-F]\{4}/ contained skipwhite nextgroup=@fishNext
137 syn match fishCharacter /\\U[0-9a-fA-F]\{8}/ contained skipwhite nextgroup=@fishNext
138 syn match fishCharacter /\\x[0-7][0-9a-fA-F]\|\\x[0-9a-fA-F]/ contained skipwhite nextgroup=@fishNext
139 syn match fishCharacter /\\X[0-9a-fA-F]\{1,2}/ contained skipwhite nextgroup=@fishNext
140 syn match fishCharacter /\\[abcefnrtv[\](){}<>\\*?~%#$|&;'" ]/ contained skipwhite nextgroup=@fishNext
141
142 syn match fishRedirection /</ contained skipwhite nextgroup=fishRedirectionTarget
143 syn match fishRedirection /[0-9&]\?>[>?]\?/ contained skipwhite nextgroup=fishRedirectionTarget
144 syn match fishRedirection /[0-9&]\?>&[0-9-]/ contained skipwhite nextgroup=@fishNext
145
146 syn match fishRedirectionTarget /[[:alnum:]$~*?{,}"'\/._-]\+/ contained contains=fishInnerVariable skipwhite nextgroup=@fishNext
147 hi def link fishRedirectionTarget fishRedirection
148
149 syn match fishSelfPid /%self\>/ contained nextgroup=@fishNext
150 hi def link fishSelfPid fishOperator
151
152
153 " Terminators
154
155 syn cluster fishTerminator contains=fishPipe,fishBackgroundJob,fishSemicolon,fishSymbolicAndOr
156
157 syn match fishPipe /\(1>\|2>\|&\)\?|/ contained skipwhite nextgroup=@fishStatement
158 hi def link fishPipe fishEnd
159
160 syn match fishBackgroundJob /&$/ contained skipwhite nextgroup=@fishStatement
161 syn match fishBackgroundJob /&[^<>&|]/me=s+1,he=s+1 contained skipwhite nextgroup=@fishStatement
162 hi def link fishBackgroundJob fishEnd
163
164 syn match fishSemicolon /;/ skipwhite nextgroup=@fishStatement
165 hi def link fishSemicolon fishEnd
166
167 syn match fishSymbolicAndOr /\(&&\|||\)/ contained skipwhite skipempty nextgroup=@fishStatement
168 hi def link fishSymbolicAndOr fishOperator
169
170
171 " Other
172
173 syn cluster fishNext contains=fishEscapedNl,@fishArgument,@fishTerminator
174
175 syn match fishEscapedNl /\\$/ skipnl skipwhite contained nextgroup=@fishNext
176
177 syn match fishComment /#.*/ contains=fishTodo,@Spell
178
179 syn keyword fishTodo TODO contained
180
181
182
183 syn sync minlines=200
184 syn sync maxlines=300
185
186
187 " Intermediate highlight groups matching $fish_color_* variables
188
189 hi def link fishCommand fish_color_command
190 hi def link fishComment fish_color_comment
191 hi def link fishEnd fish_color_end
192 hi def link fishCharacter fish_color_escape
193 hi def link fishKeyword fish_color_keyword
194 hi def link fishEscapedNl fish_color_normal
195 hi def link fishOperator fish_color_operator
196 hi def link fishVariable fish_color_operator
197 hi def link fishInnerVariable fish_color_operator
198 hi def link fishPathGlob fish_color_operator
199 hi def link fishOption fish_color_option
200 hi def link fishParameter fish_color_param
201 hi def link fishQuote fish_color_quote
202 hi def link fishRedirection fish_color_redirection
203
204
205 " Default highlight groups
206
207 hi def link fish_color_param Normal
208 hi def link fish_color_normal Normal
209 hi def link fish_color_option Normal
210 hi def link fish_color_command Function
211 hi def link fish_color_keyword Keyword
212 hi def link fish_color_end Delimiter
213 hi def link fish_color_operator Operator
214 hi def link fish_color_redirection Type
215 hi def link fish_color_quote String
216 hi def link fish_color_escape Character
217 hi def link fish_color_comment Comment
218
219 hi def link fishTodo Todo
220
221
222 let b:current_syntax = 'fish'
223
224 let &cpo = s:cpo_save
225 unlet s:cpo_save