]> ruderich.org/simon Gitweb - config/dotfiles.git/blob - vim/syntax/yaml.vim
cbf7f133ef594236c8a1b3e762cd8eb9c2b67bd6
[config/dotfiles.git] / vim / syntax / yaml.vim
1 " Vim syntax file
2 " Language:     YAML
3 " Maintainer:   motemen <motemen@gmail.com>
4 " Version:      20070822
5
6 syntax clear
7
8 if !exists('g:yaml_syntax_highlight_numbers')
9     let g:yaml_syntax_highlight_numbers = 0
10 endif
11
12 syn match  yamlValue contained +\s*\%(#.*\)\?+ contains=yamlComment nextgroup=yamlType,yamlLabel,yamlFlowMap,yamlFlowSeq,yamlBool,yamlNull,yamlTextBlock,yamlString,yamlTimestamp,yamlInt,yamlFloat,yamlPlainString
13
14 " Plain string
15 syn match  yamlPlainString       contained +.\++
16 syn match  yamlPlainStringInFlow contained +[^}\],]\++
17
18 " Number
19 if g:yaml_syntax_highlight_numbers
20     syn match  yamlInt contained /[-+]\?\%(0\|[1-9][0-9_]*\)\+\%(\.\|[0-9]\)\@!/
21     syn match  yamlInt contained /[-+]\?0b[0-1_]\+/
22     syn match  yamlInt contained /[-+]\?0[0-7_]\+/
23     syn match  yamlInt contained /[-+]\?0x[0-9a-fA-F_]\+/
24     syn match  yamlInt contained /[-+]\?[1-9][0-9_]*\%(:[0-5]\?[0-9]\)\+/
25     syn match  yamlFloat contained /[-+]\?\%([0-9][0-9_]*\)\?\.[0-9_]\+\%([eE][-+][0-9]\+\)\?\%(\.\|[0-9]\)\@!/
26     syn match  yamlFloat contained /[-+]\?[0-9][0-9_]*\%(:[0-5]\?[0-9]\)\+\.[0-9_]*/
27 endif
28 syn match  yamlFloat contained /[-+]\?\.\%(inf\|Inf\|INF\)\s*\%(#.*\)\?$/
29 syn match  yamlFloat contained /\.\%(nan\|NaN\|NAN\)\s*\%(#.*\)\?$/
30
31 " Timestamp
32 syn match  yamlTimestamp contained /[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/
33 syn match  yamlTimestamp contained /[0-9][0-9][0-9][0-9]-[0-9][0-9]\?-[0-9][0-9]\?\%([Tt]\|[ \t]\+\)[0-9][0-9]\?:[0-9][0-9]:[0-9][0-9]\%(\.[0-9]*\)\?\%([ \t]*Z\|[-+][0-9][0-9]\?\%(:[0-9][0-9]\)\?\)\?/
34
35 " Flow sequence
36 syn region yamlFlowSeq matchgroup=Delimiter start=+\[+ end=+\]+ contains=yamlKeyInFlow,yamlQuotedKeyInFlow,yamlComma
37
38 " Flow mapping
39 syn region yamlFlowMap matchgroup=Delimiter start=+{+ end=+}+ contains=yamlKeyInFlow,yamlQuotedKeyInFlow,yamlComma
40
41 " Flow mapping/sequence
42 syn match  yamlComma +,+
43
44 syn match  yamlKeyColonInFlow  contained +:+ nextgroup=yamlValueInFlow
45 syn match  yamlValueInFlow     contained +\s*+ nextgroup=yamlTypeInFlow,yamlFlowMap,yamlFlowSeq,yamlConstant,yamlTextBlock,yamlString,yamlPlainStringInFlow
46 syn match  yamlKeyInFlow       contained +[^,#'" ][^}\]]\{-}\ze:+ nextgroup=yamlKeyColonInFlow
47 syn region yamlQuotedKeyInFlow contained matchgroup=String start=+"+rs=e skip=+\\"+ end=+"\s*\ze:+ contains=yamlEscape nextgroup=yamlKeyColonInFlow
48 syn region yamlQuotedKeyInFlow contained matchgroup=String start=+'+rs=e skip=+''+  end=+'\s*\ze:+ contains=yamlSingleEscape nextgroup=yamlKeyColonInFlow
49
50 " Block mapping
51 syn match  yamlKeyColon  +:+ nextgroup=yamlValue
52 syn match  yamlKey       +[^#'"{\[ ]\%(.\)\{-}\ze:\%( \|$\)+ nextgroup=yamlKeyColon
53 syn region yamlQuotedKey matchgroup=String start=+"+rs=e skip=+\\"+ end=+"\s*\ze:+ contains=yamlEscape       nextgroup=yamlKeyColon
54 syn region yamlQuotedKey matchgroup=String start=+'+rs=e skip=+''+  end=+'\s*\ze:+ contains=yamlSingleEscape nextgroup=yamlKeyColon
55 syn region yamlKey matchgroup=Delimiter start=+?+ end=+:+rs=e-1 contains=yamlValue nextgroup=yamlKeyColon
56
57 " Block sequence
58 syn match  yamlSeqMark   +-\s*+ nextgroup=yamlValue,yamlKey
59
60 " Label
61 syn match  yamlLabel contained +[*&]\S\++
62
63 " Comment
64 syn keyword yamlTodo    contained TODO FIXME XXX NOTE
65 syn match   yamlComment +#.*+ contains=yamlTodo
66 syn region  yamlComment start=+^\.\.\.+ end=+\%$+ contains=yamlTodo
67
68 " String
69 syn region yamlString       contained start=+"+ skip=+\\"+ end=+"+ contains=yamlEscape
70 syn region yamlString       contained start=+'+ skip=+''+  end=+'+ contains=yamlSingleEscape
71 syn match  yamlEscape       contained +\\[\\"abefnrtv^0_ NLP]+
72 syn match  yamlEscape       contained '\\x\x\{2}'
73 syn match  yamlEscape       contained '\\u\x\{4}'
74 syn match  yamlEscape       contained '\\U\x\{8}'
75 syn match  yamlEscape       contained '\\\%(\r\n\|[\r\n]\)'
76 syn match  yamlSingleEscape contained +''+
77
78 " Type
79 syn match  yamlType +!\S*+ nextgroup=yamlValue
80
81 " Block style
82 syn region yamlTextBlock start=/[|>][+-]\?\%([1-9]\d*\)\?\n\z\( \+\)/ end=/^\%(\z1\|$\)\@!/
83
84 " Constant
85 syn match  yamlBool     +\%(y\|Y\|yes\|Yes\|YES\|n\|N\|no\|No\|NO\|true\|True\|TRUE\|false\|False\|FALSE\|on\|On\|ON\|off\|Off\|OFF\)\ze\s*\%(#.*\)\?$+ contained
86 syn match  yamlNull     +\%(null\|\~\)\ze\s*\%(#.*\)\?$+ contained
87
88 " Directive
89 syn match  yamlDirective +^%[^#]*\%(#.*\)\?$+ contains=yamlComment
90 syn match  yamlDocHeader +^---\s*+
91
92 highlight link yamlTodo            TODO
93 highlight link yamlComment         Comment
94 highlight link yamlKeyColon        Delimiter
95 highlight link yamlKeyColonInFlow  Delimiter
96 highlight link yamlSeqMark         Delimiter
97 highlight link yamlKey             Identifier
98 highlight link yamlQuotedKey       Identifier
99 highlight link yamlKeyInFlow       Identifier
100 highlight link yamlQuotedKeyInFlow Identifier
101 highlight link yamlBool            Constant
102 highlight link yamlNull            Constant
103 highlight link yamlTextBlock       String
104 highlight link yamlType            Type
105 highlight link yamlDocHeader       Statement
106 highlight link yamlDirective       PreProc
107 highlight link yamlLabel           Label
108 highlight link yamlInt             Number
109 highlight link yamlFloat           Number