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