blob: b6effc9b6281e6b23f6281ecbf8641fed1783230 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
" Vim syntax file
" Language: MikroTik RouterOS Script
" Maintainer: zainin <z@wintr.dev>
" Original Author: ndbjorne @ MikroTik forums
" Last Change: 2021 Nov 14
" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
syn case ignore
syn iskeyword @,48-57,-
" comments
syn match routerosComment /^\s*\zs#.*/
" options submenus: /interface ether1 etc
syn match routerosSubMenu "\([a-z]\)\@<!/[a-zA-Z0-9-]*"
" variables are matched by looking at strings ending with "=", e.g. var=
syn match routerosVariable "[a-zA-Z0-9-/]*\(=\)\@="
syn match routerosVariable "$[a-zA-Z0-9-]*"
" colored for clarity
syn match routerosDelimiter "[,=]"
" match slash in CIDR notation (1.2.3.4/24, 2001:db8::/48, ::1/128)
syn match routerosDelimiter "\(\x\|:\)\@<=\/\(\d\)\@="
" dash in IP ranges
syn match routerosDelimiter "\(\x\|:\)\@<=-\(\x\|:\)\@="
" match service names after "set", like in original routeros syntax
syn match routerosService "\(set\)\@<=\s\(api-ssl\|api\|dns\|ftp\|http\|https\|pim\|ntp\|smb\|ssh\|telnet\|winbox\|www\|www-ssl\)"
" colors various interfaces
syn match routerosInterface "bridge\d\+\|ether\d\+\|wlan\d\+\|pppoe-\(out\|in\)\d\+"
syn keyword routerosBoolean yes no true false
syn keyword routerosConditional if
" operators
syn match routerosOperator " \zs[-+*<>=!~^&.,]\ze "
syn match routerosOperator "[<>!]="
syn match routerosOperator "<<\|>>"
syn match routerosOperator "[+-]\d\@="
syn keyword routerosOperator and or in
" commands
syn keyword routerosCommands beep delay put len typeof pick log time set find environment
syn keyword routerosCommands terminal error parse resolve toarray tobool toid toip toip6
syn keyword routerosCommands tonum tostr totime add remove enable disable where get print
syn keyword routerosCommands export edit find append as-value brief detail count-only file
syn keyword routerosCommands follow follow-only from interval terse value-list without-paging
syn keyword routerosCommands return
" variable types
syn keyword routerosType global local
" loop keywords
syn keyword routerosRepeat do while for foreach
syn match routerosSpecial "[():[\]{|}]"
syn match routerosLineContinuation "\\$"
syn match routerosEscape "\\["\\nrt$?_abfv]" contained display
syn match routerosEscape "\\\x\x" contained display
syn region routerosString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=routerosEscape,routerosLineContinuation
hi link routerosComment Comment
hi link routerosSubMenu Function
hi link routerosVariable Identifier
hi link routerosDelimiter Operator
hi link routerosEscape Special
hi link routerosService Type
hi link routerosInterface Type
hi link routerosBoolean Boolean
hi link routerosConditional Conditional
hi link routerosOperator Operator
hi link routerosCommands Operator
hi link routerosType Type
hi link routerosRepeat Repeat
hi link routerosSpecial Delimiter
hi link routerosString String
hi link routerosLineContinuation Special
let b:current_syntax = "routeros"
|