Configuration for my NixOS based systems and Home Manager
1" Vim syntax file
2" Language: OS Inferno sh
3" Maintainer: Alex Efros <powerman-asdf@ya.ru>
4" URL: http://powerman.name/download/vim/syntax/infsh.vim
5" Version: 1.10
6" Last Change: 2012-12-09
7
8if version < 600
9 syntax clear
10elseif exists("b:current_syntax")
11 finish
12endif
13
14
15syn cluster infshTOP contains=infshError
16" usual typo
17syn match infshError +"+
18
19syn cluster infshTOP add=infshSubst,infshCmdOut,infshBlock
20" substitution command
21syn region infshSubst matchgroup=infshSubstDelimiter keepend extend start="\$["#]\?{\w\@=" end="}" contains=@infshTOP,@NoSpell
22syn match infshSubstName contained "\(\$["#]\?{\)\@<=\w\+" containedin=infshSubst
23" get command output
24syn region infshCmdOut matchgroup=infshCmdOutDelimiter keepend extend start="[`"]{" end="}" contains=@infshTOP,@NoSpell
25" command block
26syn region infshBlock matchgroup=infshDelimiter keepend extend start="{" end="}" contains=@infshTOP,@NoSpell
27
28syn cluster infshTOP add=infshDelimiter,infshRedir,infshConditional,infshOperator,infshPatternClass,infshPattern
29" top-level delimiters
30syn match infshDelimiter "[;&()]"
31syn match infshRedir "[|<>]\(\[\d\+\(=\d\+\)\?\]\)\?"
32syn match infshConditional "&&\|||"
33syn match infshOperator "\(:=\|=\|\^\)"
34syn region infshPatternClass matchgroup=infshPattern keepend extend oneline start="\[^\?" end="\]" contains=infshPatternInClass
35syn match infshPatternInClass contained "\(\[^\?\)\@<!-\]\@!"
36syn match infshPattern "[*?]"
37
38syn cluster infshTOP add=infshVar,infshSpecVar,infshError
39" references to variables
40syn match infshVar "\$["#]\?[$(']\@="
41syn match infshVar "\$["#]\?\(`{\)\@="
42syn match infshVar "\$["#]\(\"{\)\@="
43" variables with single-char names (spec chars & unicode)
44syn match infshVar "\$["#]\?[!%+,\-./:?@\[\\\]~]"
45syn match infshVar "\$["#]\?[^\x0-\x7f]"
46" special variables
47syn match infshSpecVar "\$["#]\?[*]"
48syn match infshSpecVar "\$["#]\?[0]"
49syn match infshSpecVar "\$["#]\?[1-9][0-9]*"
50" variables with usual names
51syn match infshVar "\$["#]\?[a-zA-Z_][*0-9a-zA-Z_]*"
52syn match infshVar "\$["#]\?[*0][*0-9a-zA-Z_]\+"
53syn match infshVar "\$["#]\?[1-9][0-9]*[*a-zA-Z_][*0-9a-zA-Z_]*"
54" more special variables
55syn match infshSpecVar "\$["#]\?\(status\|apid\|ifs\|prompt\|autoload\)[*0-9a-zA-Z_]\@!"
56" bad variables
57syn match infshError "\$["#]\?[ \t\n&);<=>^|}]\@="
58syn match infshError "\$["#]\?\((\s*)\)\@="
59syn match infshError "\$["#]\?\(''[^']\@=\)\@="
60syn match infshError "\$["#]\?\([`]{\@!\)\@="
61syn match infshError "\$["#]\(["]{\@!\)\@="
62syn match infshError "\$["#][#]\@="
63
64syn cluster infshTOP add=infshStr,infshComment,infshShebang
65" quoted string
66syn region infshStr matchgroup=infshStrQ keepend extend start="'" skip="''" end="'" contains=infshStrQQ
67syn match infshStrQQ contained "''"
68" comment
69syn match infshComment "#.*" contains=infshTodo,@Spell extend
70syn keyword infshTodo contained TODO TBD FIXME XXX NOTE BUG WARNING DEBUG OPTIMIZATION WORKAROUND
71" shebang
72syn match infshShebang "^#!/dis/sh\(\.dis\)\?\(\s\+-[nlvx]\+\)*\s*$" contains=infshOpts
73syn match infshOpts contained "-[nlvx]\+"
74
75syn cluster infshTOP add=infshStatement,infshConditional,infshRepeat,infshOperator,infshKeyword,infshException,infshPctlType
76" keywords
77syn keyword infshStatement fn subfn
78syn keyword infshConditional and or if
79syn keyword infshRepeat apply getlines for in while
80syn keyword infshOperator run builtin exit load unload
81syn keyword infshOperator no pctl status
82syn match infshOperator "[@!~]"
83syn keyword infshKeyword flag loaded whatis
84syn keyword infshException raise rescue
85syn keyword infshPctlType newfd forkfd newns forkns newpgrp nodevs
86
87
88if version >= 508 || !exists("did_infsh_syn_inits")
89 if version < 508
90 let did_infsh_syn_inits = 1
91 command -nargs=+ HiLink hi link <args>
92 else
93 command -nargs=+ HiLink hi def link <args>
94 endif
95
96 HiLink infshSubstDelimiter Identifier
97 HiLink infshSubstName Operator
98
99 HiLink infshCmdOutDelimiter Include
100
101 HiLink infshDelimiter Delimiter
102 HiLink infshRedir Type
103 HiLink infshConditional Conditional
104 HiLink infshOperator Operator
105 HiLink infshPattern SpecialChar
106 HiLink infshPatternInClass SpecialChar
107
108 HiLink infshVar Identifier
109 HiLink infshSpecVar Special
110
111 HiLink infshError Error
112
113 HiLink infshStr String
114 HiLink infshStrQ String
115 HiLink infshStrQQ SpecialChar
116
117 HiLink infshComment Comment
118 HiLink infshTodo Todo
119 HiLink infshShebang Comment
120 HiLink infshOpts PreProc
121
122 HiLink infshStatement Statement
123 HiLink infshConditional Conditional
124 HiLink infshRepeat Repeat
125 HiLink infshOperator Operator
126 HiLink infshKeyword Keyword
127 HiLink infshException Exception
128 HiLink infshPctlType Type
129
130 delcommand HiLink
131endif
132
133let b:current_syntax = "infsh"