1" Vim syntax file
2" Language: Scheme (R7RS)
3" Last Change: 2021-01-03
4" Author: Evan Hanson <evhan@foldling.org>
5" Maintainer: Evan Hanson <evhan@foldling.org>
6" Previous Author: Dirk van Deun <dirk@igwe.vub.ac.be>
7" Previous Maintainer: Sergey Khorev <sergey.khorev@gmail.com>
8" Repository: https://git.foldling.org/vim-scheme.git
9" URL: https://foldling.org/vim/syntax/scheme.vim
10
11if exists('b:current_syntax')
12  finish
13endif
14
15let s:cpo = &cpo
16set cpo&vim
17
18syn spell notoplevel
19
20syn match schemeParentheses "[^ '`\t\n()\[\]";]\+"
21syn match schemeParentheses "[)\]]"
22
23syn match schemeIdentifier /[^ '`\t\n()\[\]"|;][^ '`\t\n()\[\]"|;]*/
24
25syn region schemeQuote matchgroup=schemeData start=/'[`']*/ end=/[ \t\n()\[\]";]/me=e-1
26syn region schemeQuote matchgroup=schemeData start=/'['`]*"/ skip=/\\[\\"]/ end=/"/
27syn region schemeQuote matchgroup=schemeData start=/'['`]*|/ skip=/\\[\\|]/ end=/|/
28syn region schemeQuote matchgroup=schemeData start=/'['`]*#\?(/ end=/)/ contains=ALLBUT,schemeQuasiquote,schemeQuasiquoteForm,schemeUnquote,schemeForm,schemeDatumCommentForm,schemeImport,@schemeImportCluster,@schemeSyntaxCluster
29
30syn region schemeQuasiquote matchgroup=schemeData start=/`['`]*/ end=/[ \t\n()\[\]";]/me=e-1
31syn region schemeQuasiquote matchgroup=schemeData start=/`['`]*#\?(/ end=/)/ contains=ALLBUT,schemeQuote,schemeQuoteForm,schemeForm,schemeDatumCommentForm,schemeImport,@schemeImportCluster,@schemeSyntaxCluster
32
33syn region schemeUnquote matchgroup=schemeParentheses start=/,/ end=/[ `'\t\n\[\]()";]/me=e-1 contained contains=ALLBUT,schemeDatumCommentForm,@schemeImportCluster
34syn region schemeUnquote matchgroup=schemeParentheses start=/,@/ end=/[ `'\t\n\[\]()";]/me=e-1 contained contains=ALLBUT,schemeDatumCommentForm,@schemeImportCluster
35syn region schemeUnquote matchgroup=schemeParentheses start=/,(/ end=/)/ contained contains=ALLBUT,schemeDatumCommentForm,@schemeImportCluster
36syn region schemeUnquote matchgroup=schemeParentheses start=/,@(/ end=/)/ contained contains=ALLBUT,schemeDatumCommentForm,@schemeImportCluster
37
38syn region schemeQuoteForm matchgroup=schemeData start=/(/ end=/)/ contained contains=ALLBUT,schemeQuasiquote,schemeQuasiquoteForm,schemeUnquote,schemeForm,schemeDatumCommentForm,schemeImport,@schemeImportCluster,@schemeSyntaxCluster
39syn region schemeQuasiquoteForm matchgroup=schemeData start=/(/ end=/)/ contained contains=ALLBUT,schemeQuote,schemeForm,schemeDatumCommentForm,schemeImport,@schemeImportCluster,@schemeSyntaxCluster
40
41syn region schemeString start=/\(\\\)\@<!"/ skip=/\\[\\"]/ end=/"/ contains=@Spell
42syn region schemeSymbol start=/\(\\\)\@<!|/ skip=/\\[\\|]/ end=/|/
43
44syn match schemeNumber /\(#[dbeio]\)*[+\-]*\([0-9]\+\|inf.0\|nan.0\)\(\/\|\.\)\?[0-9+\-@\ilns]*\>/
45syn match schemeNumber /#x[+\-]*[0-9a-fA-F]\+\>/
46
47syn match schemeBoolean /#t\(rue\)\?/
48syn match schemeBoolean /#f\(alse\)\?/
49
50syn match schemeCharacter /#\\.[^ `'\t\n\[\]()]*/
51syn match schemeCharacter /#\\x[0-9a-fA-F]\+/
52
53syn match schemeComment /;.*$/ contains=@Spell
54
55syn region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeMultilineComment,@Spell
56
57syn region schemeForm matchgroup=schemeParentheses start="(" end=")" contains=ALLBUT,schemeUnquote,schemeDatumCommentForm,@schemeImportCluster
58syn region schemeForm matchgroup=schemeParentheses start="\[" end="\]" contains=ALLBUT,schemeUnquote,schemeDatumCommentForm,@schemeImportCluster
59
60syn region schemeVector matchgroup=schemeData start="#(" end=")" contains=ALLBUT,schemeQuasiquote,schemeQuasiquoteForm,schemeUnquote,schemeForm,schemeDatumCommentForm,schemeImport,@schemeImportCluster,@schemeSyntaxCluster
61syn region schemeVector matchgroup=schemeData start="#[fsu]\d\+(" end=")" contains=schemeNumber,schemeComment,schemeDatumComment
62
63if exists('g:is_chicken') || exists('b:is_chicken')
64  syn region schemeImport matchgroup=schemeImport start="\(([ \t\n]*\)\@<=\(import\|import-syntax\|use\|require-extension\)\(-for-syntax\)\?\>" end=")"me=e-1 contained contains=schemeImportForm,schemeIdentifier,schemeComment,schemeDatumComment
65else
66  syn region schemeImport matchgroup=schemeImport start="\(([ \t\n]*\)\@<=\(import\)\>" end=")"me=e-1 contained contains=schemeImportForm,schemeIdentifier,schemeComment,schemeDatumComment
67endif
68
69syn match   schemeImportKeyword "\(([ \t\n]*\)\@<=\(except\|only\|prefix\|rename\)\>"
70syn region  schemeImportForm matchgroup=schemeParentheses start="(" end=")" contained contains=schemeIdentifier,schemeComment,schemeDatumComment,@schemeImportCluster
71syn cluster schemeImportCluster contains=schemeImportForm,schemeImportKeyword
72
73syn region schemeDatumComment matchgroup=schemeDatumComment start=/#;[ \t\n`']*/ end=/[ \t\n()\[\]";]/me=e-1
74syn region schemeDatumComment matchgroup=schemeDatumComment start=/#;[ \t\n`']*"/ skip=/\\[\\"]/ end=/"/
75syn region schemeDatumComment matchgroup=schemeDatumComment start=/#;[ \t\n`']*|/ skip=/\\[\\|]/ end=/|/
76syn region schemeDatumComment matchgroup=schemeDatumComment start=/#;[ \t\n`']*\(#\([usf]\d\+\)\?\)\?(/ end=/)/ contains=schemeDatumCommentForm
77syn region schemeDatumCommentForm start="(" end=")" contained contains=schemeDatumCommentForm
78
79syn cluster schemeSyntaxCluster contains=schemeFunction,schemeKeyword,schemeSyntax,schemeExtraSyntax,schemeLibrarySyntax,schemeSyntaxSyntax
80
81syn keyword schemeLibrarySyntax define-library
82syn keyword schemeLibrarySyntax export
83syn keyword schemeLibrarySyntax include
84syn keyword schemeLibrarySyntax include-ci
85syn keyword schemeLibrarySyntax include-library-declarations
86syn keyword schemeLibrarySyntax library
87syn keyword schemeLibrarySyntax cond-expand
88
89syn keyword schemeSyntaxSyntax define-syntax
90syn keyword schemeSyntaxSyntax let-syntax
91syn keyword schemeSyntaxSyntax letrec-syntax
92syn keyword schemeSyntaxSyntax syntax-rules
93
94syn keyword schemeSyntax =>
95syn keyword schemeSyntax and
96syn keyword schemeSyntax begin
97syn keyword schemeSyntax case
98syn keyword schemeSyntax case-lambda
99syn keyword schemeSyntax cond
100syn keyword schemeSyntax define
101syn keyword schemeSyntax define-record-type
102syn keyword schemeSyntax define-values
103syn keyword schemeSyntax delay
104syn keyword schemeSyntax delay-force
105syn keyword schemeSyntax do
106syn keyword schemeSyntax else
107syn keyword schemeSyntax guard
108syn keyword schemeSyntax if
109syn keyword schemeSyntax lambda
110syn keyword schemeSyntax let
111syn keyword schemeSyntax let*
112syn keyword schemeSyntax let*-values
113syn keyword schemeSyntax let-values
114syn keyword schemeSyntax letrec
115syn keyword schemeSyntax letrec*
116syn keyword schemeSyntax or
117syn keyword schemeSyntax parameterize
118syn keyword schemeSyntax quasiquote
119syn keyword schemeSyntax quote
120syn keyword schemeSyntax set!
121syn keyword schemeSyntax unless
122syn keyword schemeSyntax unquote
123syn keyword schemeSyntax unquote-splicing
124syn keyword schemeSyntax when
125
126syn keyword schemeFunction *
127syn keyword schemeFunction +
128syn keyword schemeFunction -
129syn keyword schemeFunction /
130syn keyword schemeFunction <
131syn keyword schemeFunction <=
132syn keyword schemeFunction =
133syn keyword schemeFunction >
134syn keyword schemeFunction >=
135syn keyword schemeFunction abs
136syn keyword schemeFunction acos
137syn keyword schemeFunction acos
138syn keyword schemeFunction angle
139syn keyword schemeFunction append
140syn keyword schemeFunction apply
141syn keyword schemeFunction asin
142syn keyword schemeFunction assoc
143syn keyword schemeFunction assq
144syn keyword schemeFunction assv
145syn keyword schemeFunction atan
146syn keyword schemeFunction binary-port?
147syn keyword schemeFunction boolean=?
148syn keyword schemeFunction boolean?
149syn keyword schemeFunction bytevector
150syn keyword schemeFunction bytevector-append
151syn keyword schemeFunction bytevector-append
152syn keyword schemeFunction bytevector-copy
153syn keyword schemeFunction bytevector-copy!
154syn keyword schemeFunction bytevector-length
155syn keyword schemeFunction bytevector-u8-ref
156syn keyword schemeFunction bytevector-u8-set!
157syn keyword schemeFunction bytevector?
158syn keyword schemeFunction caaaar
159syn keyword schemeFunction caaadr
160syn keyword schemeFunction caaar
161syn keyword schemeFunction caadar
162syn keyword schemeFunction caaddr
163syn keyword schemeFunction caadr
164syn keyword schemeFunction caar
165syn keyword schemeFunction cadaar
166syn keyword schemeFunction cadadr
167syn keyword schemeFunction cadar
168syn keyword schemeFunction caddar
169syn keyword schemeFunction cadddr
170syn keyword schemeFunction caddr
171syn keyword schemeFunction cadr
172syn keyword schemeFunction call-with-current-continuation
173syn keyword schemeFunction call-with-input-file
174syn keyword schemeFunction call-with-output-file
175syn keyword schemeFunction call-with-port
176syn keyword schemeFunction call-with-values
177syn keyword schemeFunction call/cc
178syn keyword schemeFunction car
179syn keyword schemeFunction cdaaar
180syn keyword schemeFunction cdaadr
181syn keyword schemeFunction cdaar
182syn keyword schemeFunction cdadar
183syn keyword schemeFunction cdaddr
184syn keyword schemeFunction cdadr
185syn keyword schemeFunction cdar
186syn keyword schemeFunction cddaar
187syn keyword schemeFunction cddadr
188syn keyword schemeFunction cddar
189syn keyword schemeFunction cdddar
190syn keyword schemeFunction cddddr
191syn keyword schemeFunction cdddr
192syn keyword schemeFunction cddr
193syn keyword schemeFunction cdr
194syn keyword schemeFunction ceiling
195syn keyword schemeFunction char->integer
196syn keyword schemeFunction char-alphabetic?
197syn keyword schemeFunction char-ci<=?
198syn keyword schemeFunction char-ci<?
199syn keyword schemeFunction char-ci=?
200syn keyword schemeFunction char-ci>=?
201syn keyword schemeFunction char-ci>?
202syn keyword schemeFunction char-downcase
203syn keyword schemeFunction char-foldcase
204syn keyword schemeFunction char-lower-case?
205syn keyword schemeFunction char-numeric?
206syn keyword schemeFunction char-ready?
207syn keyword schemeFunction char-upcase
208syn keyword schemeFunction char-upper-case?
209syn keyword schemeFunction char-whitespace?
210syn keyword schemeFunction char<=?
211syn keyword schemeFunction char<?
212syn keyword schemeFunction char=?
213syn keyword schemeFunction char>=?
214syn keyword schemeFunction char>?
215syn keyword schemeFunction char?
216syn keyword schemeFunction close-input-port
217syn keyword schemeFunction close-output-port
218syn keyword schemeFunction close-port
219syn keyword schemeFunction command-line
220syn keyword schemeFunction complex?
221syn keyword schemeFunction cons
222syn keyword schemeFunction cos
223syn keyword schemeFunction current-error-port
224syn keyword schemeFunction current-input-port
225syn keyword schemeFunction current-jiffy
226syn keyword schemeFunction current-output-port
227syn keyword schemeFunction current-second
228syn keyword schemeFunction delete-file
229syn keyword schemeFunction denominator
230syn keyword schemeFunction digit-value
231syn keyword schemeFunction display
232syn keyword schemeFunction dynamic-wind
233syn keyword schemeFunction emergency-exit
234syn keyword schemeFunction environment
235syn keyword schemeFunction eof-object
236syn keyword schemeFunction eof-object?
237syn keyword schemeFunction eq?
238syn keyword schemeFunction equal?
239syn keyword schemeFunction eqv?
240syn keyword schemeFunction error
241syn keyword schemeFunction error-object-irritants
242syn keyword schemeFunction error-object-message
243syn keyword schemeFunction error-object?
244syn keyword schemeFunction eval
245syn keyword schemeFunction even?
246syn keyword schemeFunction exact
247syn keyword schemeFunction exact->inexact
248syn keyword schemeFunction exact-integer-sqrt
249syn keyword schemeFunction exact-integer?
250syn keyword schemeFunction exact?
251syn keyword schemeFunction exit
252syn keyword schemeFunction exp
253syn keyword schemeFunction expt
254syn keyword schemeFunction features
255syn keyword schemeFunction file-error?
256syn keyword schemeFunction file-exists?
257syn keyword schemeFunction finite?
258syn keyword schemeFunction floor
259syn keyword schemeFunction floor-quotient
260syn keyword schemeFunction floor-remainder
261syn keyword schemeFunction floor/
262syn keyword schemeFunction flush-output-port
263syn keyword schemeFunction for-each
264syn keyword schemeFunction force
265syn keyword schemeFunction gcd
266syn keyword schemeFunction get-environment-variable
267syn keyword schemeFunction get-environment-variables
268syn keyword schemeFunction get-output-bytevector
269syn keyword schemeFunction get-output-string
270syn keyword schemeFunction imag-part
271syn keyword schemeFunction inexact
272syn keyword schemeFunction inexact->exact
273syn keyword schemeFunction inexact?
274syn keyword schemeFunction infinite?
275syn keyword schemeFunction input-port-open?
276syn keyword schemeFunction input-port?
277syn keyword schemeFunction integer->char
278syn keyword schemeFunction integer?
279syn keyword schemeFunction interaction-environment
280syn keyword schemeFunction jiffies-per-second
281syn keyword schemeFunction lcm
282syn keyword schemeFunction length
283syn keyword schemeFunction list
284syn keyword schemeFunction list->string
285syn keyword schemeFunction list->vector
286syn keyword schemeFunction list-copy
287syn keyword schemeFunction list-ref
288syn keyword schemeFunction list-set!
289syn keyword schemeFunction list-tail
290syn keyword schemeFunction list?
291syn keyword schemeFunction load
292syn keyword schemeFunction log
293syn keyword schemeFunction magnitude
294syn keyword schemeFunction make-bytevector
295syn keyword schemeFunction make-list
296syn keyword schemeFunction make-parameter
297syn keyword schemeFunction make-polar
298syn keyword schemeFunction make-promise
299syn keyword schemeFunction make-rectangular
300syn keyword schemeFunction make-string
301syn keyword schemeFunction make-vector
302syn keyword schemeFunction map
303syn keyword schemeFunction max
304syn keyword schemeFunction member
305syn keyword schemeFunction memq
306syn keyword schemeFunction memv
307syn keyword schemeFunction min
308syn keyword schemeFunction modulo
309syn keyword schemeFunction nan?
310syn keyword schemeFunction negative?
311syn keyword schemeFunction newline
312syn keyword schemeFunction not
313syn keyword schemeFunction null-environment
314syn keyword schemeFunction null?
315syn keyword schemeFunction number->string
316syn keyword schemeFunction number?
317syn keyword schemeFunction numerator
318syn keyword schemeFunction odd?
319syn keyword schemeFunction open-binary-input-file
320syn keyword schemeFunction open-binary-output-file
321syn keyword schemeFunction open-input-bytevector
322syn keyword schemeFunction open-input-file
323syn keyword schemeFunction open-input-string
324syn keyword schemeFunction open-output-bytevector
325syn keyword schemeFunction open-output-file
326syn keyword schemeFunction open-output-string
327syn keyword schemeFunction output-port-open?
328syn keyword schemeFunction output-port?
329syn keyword schemeFunction pair?
330syn keyword schemeFunction peek-char
331syn keyword schemeFunction peek-u8
332syn keyword schemeFunction port?
333syn keyword schemeFunction positive?
334syn keyword schemeFunction procedure?
335syn keyword schemeFunction promise?
336syn keyword schemeFunction quotient
337syn keyword schemeFunction raise
338syn keyword schemeFunction raise-continuable
339syn keyword schemeFunction rational?
340syn keyword schemeFunction rationalize
341syn keyword schemeFunction read
342syn keyword schemeFunction read-bytevector
343syn keyword schemeFunction read-bytevector!
344syn keyword schemeFunction read-char
345syn keyword schemeFunction read-error?
346syn keyword schemeFunction read-line
347syn keyword schemeFunction read-string
348syn keyword schemeFunction read-u8
349syn keyword schemeFunction real-part
350syn keyword schemeFunction real?
351syn keyword schemeFunction remainder
352syn keyword schemeFunction reverse
353syn keyword schemeFunction round
354syn keyword schemeFunction scheme-report-environment
355syn keyword schemeFunction set-car!
356syn keyword schemeFunction set-cdr!
357syn keyword schemeFunction sin
358syn keyword schemeFunction sqrt
359syn keyword schemeFunction square
360syn keyword schemeFunction string
361syn keyword schemeFunction string->list
362syn keyword schemeFunction string->number
363syn keyword schemeFunction string->symbol
364syn keyword schemeFunction string->utf8
365syn keyword schemeFunction string->vector
366syn keyword schemeFunction string-append
367syn keyword schemeFunction string-ci<=?
368syn keyword schemeFunction string-ci<?
369syn keyword schemeFunction string-ci=?
370syn keyword schemeFunction string-ci>=?
371syn keyword schemeFunction string-ci>?
372syn keyword schemeFunction string-copy
373syn keyword schemeFunction string-copy!
374syn keyword schemeFunction string-downcase
375syn keyword schemeFunction string-fill!
376syn keyword schemeFunction string-foldcase
377syn keyword schemeFunction string-for-each
378syn keyword schemeFunction string-length
379syn keyword schemeFunction string-map
380syn keyword schemeFunction string-ref
381syn keyword schemeFunction string-set!
382syn keyword schemeFunction string-upcase
383syn keyword schemeFunction string<=?
384syn keyword schemeFunction string<?
385syn keyword schemeFunction string=?
386syn keyword schemeFunction string>=?
387syn keyword schemeFunction string>?
388syn keyword schemeFunction string?
389syn keyword schemeFunction substring
390syn keyword schemeFunction symbol->string
391syn keyword schemeFunction symbol=?
392syn keyword schemeFunction symbol?
393syn keyword schemeFunction syntax-error
394syn keyword schemeFunction tan
395syn keyword schemeFunction textual-port?
396syn keyword schemeFunction transcript-off
397syn keyword schemeFunction transcript-on
398syn keyword schemeFunction truncate
399syn keyword schemeFunction truncate-quotient
400syn keyword schemeFunction truncate-remainder
401syn keyword schemeFunction truncate/
402syn keyword schemeFunction u8-ready?
403syn keyword schemeFunction utf8->string
404syn keyword schemeFunction values
405syn keyword schemeFunction vector
406syn keyword schemeFunction vector->list
407syn keyword schemeFunction vector->string
408syn keyword schemeFunction vector-append
409syn keyword schemeFunction vector-copy
410syn keyword schemeFunction vector-copy!
411syn keyword schemeFunction vector-fill!
412syn keyword schemeFunction vector-for-each
413syn keyword schemeFunction vector-length
414syn keyword schemeFunction vector-map
415syn keyword schemeFunction vector-ref
416syn keyword schemeFunction vector-set!
417syn keyword schemeFunction vector?
418syn keyword schemeFunction with-exception-handler
419syn keyword schemeFunction with-input-from-file
420syn keyword schemeFunction with-output-to-file
421syn keyword schemeFunction write
422syn keyword schemeFunction write-bytevector
423syn keyword schemeFunction write-char
424syn keyword schemeFunction write-shared
425syn keyword schemeFunction write-simple
426syn keyword schemeFunction write-string
427syn keyword schemeFunction write-u8
428syn keyword schemeFunction zero?
429
430hi def link schemeBoolean Boolean
431hi def link schemeCharacter Character
432hi def link schemeComment Comment
433hi def link schemeConstant Constant
434hi def link schemeData Delimiter
435hi def link schemeDatumComment Comment
436hi def link schemeDatumCommentForm Comment
437hi def link schemeDelimiter Delimiter
438hi def link schemeError Error
439hi def link schemeExtraSyntax Underlined
440hi def link schemeFunction Function
441hi def link schemeIdentifier Normal
442hi def link schemeImport PreProc
443hi def link schemeImportKeyword PreProc
444hi def link schemeKeyword Type
445hi def link schemeLibrarySyntax PreProc
446hi def link schemeMultilineComment Comment
447hi def link schemeNumber Number
448hi def link schemeParentheses Normal
449hi def link schemeQuasiquote Delimiter
450hi def link schemeQuote Delimiter
451hi def link schemeSpecialSyntax Special
452hi def link schemeString String
453hi def link schemeSymbol Normal
454hi def link schemeSyntax Statement
455hi def link schemeSyntaxSyntax PreProc
456hi def link schemeTypeSyntax Type
457
458let b:did_scheme_syntax = 1
459
460if exists('b:is_chicken') || exists('g:is_chicken')
461  exe 'ru! syntax/chicken.vim'
462endif
463
464unlet b:did_scheme_syntax
465let b:current_syntax = 'scheme'
466let &cpo = s:cpo
467unlet s:cpo
468