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