blob: 7275d65c79997c51b2e8d898a12d8c241b6cd0b8 [file] [log] [blame]
Pierrick Guillaume836b87d2025-04-13 18:25:33 +02001" Vim syntax file
2" Language: mbsyncrc
3" Maintainer: Pierrick Guillaume <pguillaume@fymyte.com>
4" Last Change: 2025 Apr 13
Filippo Bonazzibb78ea22025-06-04 20:13:03 +02005" 2025 Jun 04 by Vim project: match TLSType configuration variable
Pierrick Guillaume836b87d2025-04-13 18:25:33 +02006"
7" Syntax support for mbsync config file
8
9" This file is based on the mbsync manual (isync v1.4.4)
10" https://isync.sourceforge.io/mbsync.html
11
12if exists('b:current_syntax')
13 finish
14endif
15
16let b:current_syntax = 'mbsync'
17
18let s:cpo_save = &cpo
19set cpo&vim
20
21syn match mbsError '.*'
22
23syn match mbsCommentL '^#.*$'
24
25" Properties {{{
26
27syn match mbsNumber '[0-9]\+' display contained
28syn match mbsPath '\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@!-]\|\\.\)\+' display contained
29syn match mbsPath '"\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@! -]\|\\.\)\+"' display contained
30syn match mbsName '\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@!-]\|\\.\)\+' display contained
31syn match mbsName '"\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@! -]\|\\.\)\+"' display contained
32syn match mbsCommand '+\?.*$' display contained contains=mbsCommandPrompt
33syn match mbsCommandPrompt '+' display contained
34syn region mbsString start=+"+ skip=+\\"+ end=+"+ display contained
35syn match mbsSizeUnit '[kKmMbB]' display contained
36syn match mbsSize '[0-9]\+' display contained contains=mbsNumber nextgroup=mbsSizeUnit
37syn keyword mbsBool yes no contained
38
39" }}}
40
41
42" Stores {{{
43" Global Store Config Items
44syn match mbsGlobConfPath '^Path\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent
45syn match mbsGlobConfMaxSize '^MaxSize\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsSize transparent
46syn match mbsGlobConfMapInbox '^MapInbox\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent
47syn match mbsGlobConfFlatten '^Flatten\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent
48syn match mbsGlobConfTrash '^Trash\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsPath transparent
49syn match mbsGlobConfTrashNO '^TrashNewOnly\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsBool transparent
50syn match mbsGlobConfTrashRN '^TrashRemoteNew\s\+\ze.*$' contains=mbsGlobConfItemK contained nextgroup=mbsBool transparent
51syn keyword mbsGlobConfItemK Path MaxSize MapInbox Flatten Trash TrashNewOnly TrashRemoteNew contained
52
53syn cluster mbsGlobConfItem contains=mbsGlobConfPath,mbsGlobConfMaxSize,mbsGlobConfMapInbox,mbsGlobConfFlatten,mbsCommentL,mbsGlobConfTrash.*
54
55
56" MaildirStore
57syn match mbsMdSConfStMaildirStore '^MaildirStore\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsName transparent
58syn match mbsMdSConfStAltMap '^AltMap\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsBool transparent
59syn match mbsMdsConfStInbox '^Inbox\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsPath transparent
60syn match mbsMdsConfStInfoDelimiter '^InfoDelimiter\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsPath transparent
61syn keyword mbsMdSConfSubFoldersOpt Verbatim Legacy contained
62syn match mbsMdSConfSubFoldersOpt 'Maildir++' display contained
63syn match mbsMdsConfStSubFolders '^SubFolders\s\+\ze.*$' contains=mbsMdSConfItemK contained nextgroup=mbsMdSConfSubFoldersOpt transparent
64
65syn cluster mbsMdSConfItem contains=mbsMdSConfSt.*
66
67syn keyword mbsMdSConfItemK MaildirStore AltMap Inbox InfoDelimiter SubFolders contained
68
69syn region mbsMaildirStore start="^MaildirStore" end="^$" end='\%$' contains=@mbsGlobConfItem,mbsCommentL,@mbsMdSConfItem,mbsError transparent
70
71
72" IMAP4Accounts
73syn match mbsIAConfStIMAPAccount '^IMAPAccount\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsName transparent
74syn match mbsIAConfStHost '^Host\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
75syn match mbsIAConfStPort '^Port\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsNumber transparent
76syn match mbsIAConfStTimeout '^Timeout\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsNumber transparent
77syn match mbsIAConfStUser '^User\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
78syn match mbsIAConfStUserCmd '^UserCmd\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsCommand transparent
79syn match mbsIAConfStPass '^Pass\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
80syn match mbsIAConfStPassCmd '^PassCmd\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsCommand transparent
81syn match mbsIAConfStUseKeychain '^UseKeychain\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsBool transparent
82syn match mbsIAConfStTunnel '^Tunnel\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsCommand transparent
83syn match mbsIAConfStAuthMechs '^AuthMechs\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
Filippo Bonazzibb78ea22025-06-04 20:13:03 +020084syn keyword mbsIAConfTLSTypeOpt None STARTTLS IMAPS contained
85syn match mbsIAConfStSSLType '^SSLType\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsIAConfTLSTypeOpt transparent
86syn match mbsIAConfStTLSType '^TLSType\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsIAConfTLSTypeOpt transparent
Pierrick Guillaume836b87d2025-04-13 18:25:33 +020087syn match mbsIAConfSSLVersionsOpt '\%(SSLv3\|TLSv1\%(.[123]\)\?\)\%(\s\+\%(SSLv3\|TLSv1\%(.[123]\)\?\)\)*' contained
88syn match mbsIAConfStSSLVersions '^SSLVersions\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsIAConfSSLVersionsOpt transparent
89syn match mbsIAConfStSystemCertificates '^SystemCertificates\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsBool transparent
90syn match mbsIAConfStCertificateFile '^CertificateFile\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
91syn match mbsIAConfStClientCertificate '^ClientCertificate\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
92syn match mbsIAConfStClientKey '^ClientKey\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
93syn match mbsIAConfStCipherString '^CipherString\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsString transparent
94syn match mbsIAConfStPipelineDepth '^PipelineDepth\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsNumber transparent
95syn match mbsIAConfStDisableExtensions '^DisableExtensions\?\s\+\ze.*$' contains=mbsIAConfItemK contained nextgroup=mbsPath transparent
96
97syn cluster mbsIAConfItem contains=mbsIAConfSt.*
98
99syn keyword mbsIAConfItemK
100 \ IMAPAccount Host Port Timeout User UserCmd Pass PassCmd UseKeychain Tunnel
Filippo Bonazzibb78ea22025-06-04 20:13:03 +0200101 \ AuthMechs SSLType TLSType SSLVersions SystemCertificates CertificateFile ClientCertificate
Pierrick Guillaume836b87d2025-04-13 18:25:33 +0200102 \ ClientKey CipherString PipelineDepth DisableExtension[s] contained
103
104syn region mbsIMAP4AccontsStore start="^IMAPAccount" end="^$" end="\%$" contains=@mbsGlobConfItem,mbsCommentL,@mbsIAConfItem,mbsError transparent
105
106
107" IMAPStores
108syn match mbsISConfStIMAPStore '^IMAPStore\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsName transparent
109syn match mbsISConfStAccount '^Account\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsName transparent
110syn match mbsISConfStUseNamespace '^UseNamespace\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsBool transparent
111syn match mbsISConfStPathDelimiter '^PathDelimiter\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsPath transparent
112syn match mbsISConfStSubscribedOnly '^SubscribedOnly\s\+\ze.*$' contains=mbsISConfItemK contained nextgroup=mbsBool transparent
113
114syn cluster mbsISConfItem contains=mbsISConfSt.*
115
116syn keyword mbsISConfItemK IMAPStore Account UseNamespace PathDelimiter SubscribedOnly contained
117
118syn region mbsIMAPStore start="^IMAPStore" end="^$" end="\%$" contains=@mbsGlobConfItem,mbsCommentL,@mbsISConfItem,mbsError transparent
119
120" }}}
121
122" Channels {{{
123
124syn match mbsCConfStChannel '^Channel\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsName transparent
125syn region mbsCConfProxOpt matchgroup=mbsCConfProxOptOp start=':' matchgroup=mbsCConfProxOptOp end=':' contained contains=mbsName nextgroup=mbsPath keepend
126syn match mbsCConfStFar '^Far\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfProxOpt transparent
127syn match mbsCConfStNear '^Near\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfProxOpt transparent
128syn match mbsCConfPatternOptOp '[*%!]' display contained
129syn match mbsCConfPatternOpt '.*$' display contained contains=mbsCConfPatternOptOp
130syn match mbsCConfStPattern '^Patterns\?\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfPatternOpt transparent
131syn match mbsCConfStMaxSize '^MaxSize\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsSize transparent
132syn match mbsCConfStMaxMessages '^MaxMessages\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsNumber transparent
133syn match mbsCConfStExpireUnread '^ExpireUnread\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsBool transparent
134syn match mbsCConfSyncOpt 'None\|All\|\%(\s\+\%(Pull\|Push\|New\|ReNew\|Delete\|Flags\)\)\+' display contained
135syn match mbsCConfStSync '^Sync\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfSyncOpt transparent
136syn keyword mbsCConfManipOpt None Far Near Both contained
137syn match mbsCConfStCreate '^Create\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfManipOpt transparent
138syn match mbsCConfStRemove '^Remove\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfManipOpt transparent
139syn match mbsCConfStExpunge '^Expunge\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfManipOpt transparent
140syn match mbsCConfStCopyArrivalDate '^CopyArrivalDate\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsBool transparent
141syn match mbsCConfSyncStateOpt '\*\|.*$' display contained contains=mbsCConfSyncStateOptOp,mbsPath transparent
142syn match mbsCConfSyncStateOptOp '\*' display contained
143syn match mbsCConfStSyncState '^SyncState\s\+\ze.*$' contains=mbsCConfItemK contained nextgroup=mbsCConfSyncStateOpt transparent
144
145syn cluster mbsCConfItem contains=mbsCConfSt.*
146
147syn keyword mbsCConfItemK
148 \ Channel Far Near Pattern[s] MaxSize MaxMessages ExpireUnread Sync Create
149 \ Remove Expunge CopyArrivalDate SyncState contained
150
151syn region mbsChannel start="^Channel" end="^$" end="\%$" contains=@mbsCConfItem,mbsCommentL,mbsError transparent
152
153" }}}
154
155" Groups {{{
156
157syn match mbsGConfGroupOpt '\%([A-Za-z0-9/._+#$%~=\\{}\[\]:@!-]\|\\.\)\+' display contained contains=mbsName nextgroup=mbsGConfChannelOpt
158syn match mbsGConfStGroup '^Group\s\+\ze.*$' contains=mbsGConfItemK contained nextgroup=mbsGConfGroupOpt transparent
159syn match mbsGConfChannelOpt '.*$' display contained
160syn match mbsGConfStChannel '^Channels\?\s\+\ze.*$' contains=mbsGConfItemK contained nextgroup=mbsGConfChannelOpt transparent
161
162syn cluster mbsGConfItem contains=mbsGConfSt.*
163
164syn keyword mbsGConfItemK Group Channel[s] contained
165
166syn region mbsGroup start="^Group" end="^$" end="\%$" contains=@mbsGConfItem,mbsError transparent
167
168" }}}
169
170" Global Options {{{
171
172syn match mbsFSync '^FSync\s\+\ze.*$' contains=mbsGlobOptItemK nextgroup=mbsBool transparent
173syn match mbsFieldDelimiter '^FieldDelimiter\s\+\ze.*$' contains=mbsGlobOptItemK nextgroup=mbsPath transparent
174syn match mbsBufferLimit '^BufferLimit\s\+\ze.*$' contains=mbsGlobOptItemK nextgroup=mbsSize transparent
175
176syn keyword mbsGlobOptItemK FSync FieldDelimiter BufferLimit contained
177" }}}
178
179" Highlights {{{
180
181hi def link mbsError Error
182
183hi def link mbsCommentL Comment
184
185hi def link mbsNumber Number
186hi def link mbsSizeUnit Type
187hi def link mbsPath String
188hi def link mbsString String
189hi def link mbsCommand String
190hi def link mbsCommandPrompt Operator
191hi def link mbsName Constant
192hi def link mbsBool Boolean
193
194hi def link mbsGlobConfItemK Statement
195
196hi def link mbsMdSConfItemK Statement
197hi def link mbsMdSConfSubFoldersOpt Keyword
198
199hi def link mbsIAConfItemK Statement
Filippo Bonazzibb78ea22025-06-04 20:13:03 +0200200hi def link mbsIAConfTLSTypeOpt Keyword
Pierrick Guillaume836b87d2025-04-13 18:25:33 +0200201hi def link mbsIAConfSSLVersionsOpt Keyword
202
203hi def link mbsISConfItemK Statement
204
205hi def link mbsCConfItemK Statement
206hi def link mbsCConfProxOptOp Operator
207hi def link mbsCConfPatternOpt String
208hi def link mbsCConfPatternOptOp Operator
209hi def link mbsCConfSyncOpt Keyword
210hi def link mbsCConfManipOpt Keyword
211hi def link mbsCConfSyncStateOptOp Operator
212
213hi def link mbsGConfItemK Statement
214hi def link mbsGConfChannelOpt String
215
216hi def link mbsGlobOptItemK Statement
217" }}}
218
219let &cpo = s:cpo_save
220unlet s:cpo_save