blob: 02fd24bf39261be6cf4ed0b1cce54a4e31dcaca0 [file] [log] [blame]
Bram Moolenaar6ebe4f92022-10-28 20:47:54 +01001" Vim syntax file
2" Language: OpenVPN
3" Maintainer: ObserverOfTime <chronobserver@disroot.org>
4" Filenames: *.ovpn
5" Last Change: 2022 Oct 16
6
7if exists('b:current_syntax')
8 finish
9endif
10
11let s:cpo_save = &cpoptions
12set cpoptions&vim
13
14" Options
15syntax match openvpnOption /^[a-z-]\+/
16 \ skipwhite nextgroup=openvpnArgList
17syntax match openvpnArgList /.*$/ transparent contained
18 \ contains=openvpnArgument,openvpnNumber,
19 \ openvpnIPv4Address,openvpnIPv6Address,
20 \ openvpnSignal,openvpnComment
21
22" Arguments
23syntax match openvpnArgument /[^\\"' \t]\+/
24 \ contained contains=openvpnEscape
25syntax region openvpnArgument matchgroup=openvpnQuote
26 \ start=/"/ skip=/\\"/ end=/"/
27 \ oneline contained contains=openvpnEscape
28syntax region openvpnArgument matchgroup=openvpnQuote
29 \ start=/'/ skip=/\\'/ end=/'/
30 \ oneline contained
31syntax match openvpnEscape /\\[\\" \t]/ contained
32
33" Numbers
34syntax match openvpnNumber /\<[1-9][0-9]*\(\.[0-9]\+\)\?\>/ contained
35
36" Signals
37syntax match openvpnSignal /SIG\(HUP\|INT\|TERM\|USER[12]\)/ contained
38
39" IP addresses
40syntax match openvpnIPv4Address /\(\d\{1,3}\.\)\{3}\d\{1,3}/
41 \ contained nextgroup=openvpnSlash
42syntax match openvpnIPv6Address /\([A-F0-9]\{1,4}:\)\{7}\[A-F0-9]\{1,4}/
43 \ contained nextgroup=openvpnSlash
44syntax match openvpnSlash "/" contained
45 \ nextgroup=openvpnIPv4Address,openvpnIPv6Address,openvpnNumber
46
47" Inline files
48syntax region openvpnInline matchgroup=openvpnTag
49 \ start=+^<\z([a-z-]\+\)>+ end=+^</\z1>+
50
51" Comments
52syntax keyword openvpnTodo contained TODO FIXME NOTE XXX
53syntax match openvpnComment /^[;#].*$/ contains=openvpnTodo
54syntax match openvpnComment /\s\+\zs[;#].*$/ contains=openvpnTodo
55
56hi def link openvpnArgument String
57hi def link openvpnComment Comment
58hi def link openvpnEscape SpecialChar
59hi def link openvpnIPv4Address Constant
60hi def link openvpnIPv6Address Constant
61hi def link openvpnNumber Number
62hi def link openvpnOption Keyword
63hi def link openvpnQuote Quote
64hi def link openvpnSignal Special
65hi def link openvpnSlash Delimiter
66hi def link openvpnTag Tag
67hi def link openvpnTodo Todo
68
69let b:current_syntax = 'openvpn'
70
71let &cpoptions = s:cpo_save
72unlet s:cpo_save