Bram Moolenaar | 34401cc | 2014-08-29 15:12:19 +0200 | [diff] [blame] | 1 | " dockerfile.vim - Syntax highlighting for Dockerfiles |
Bram Moolenaar | 0952131 | 2016-08-12 22:54:35 +0200 | [diff] [blame] | 2 | " Maintainer: Honza Pokorny <https://honza.ca> |
Christian Brabandt | 70881ba | 2024-12-20 19:53:55 +0100 | [diff] [blame] | 3 | " Last Change: 2024 Dec 20 |
Bram Moolenaar | 34401cc | 2014-08-29 15:12:19 +0200 | [diff] [blame] | 4 | " License: BSD |
| 5 | |
Bram Moolenaar | 560979e | 2020-02-04 22:53:05 +0100 | [diff] [blame] | 6 | " https://docs.docker.com/engine/reference/builder/ |
Bram Moolenaar | 34401cc | 2014-08-29 15:12:19 +0200 | [diff] [blame] | 7 | |
| 8 | if exists("b:current_syntax") |
| 9 | finish |
| 10 | endif |
| 11 | |
Bram Moolenaar | 560979e | 2020-02-04 22:53:05 +0100 | [diff] [blame] | 12 | syntax include @JSON syntax/json.vim |
| 13 | unlet b:current_syntax |
| 14 | |
| 15 | syntax include @Shell syntax/sh.vim |
| 16 | unlet b:current_syntax |
Bram Moolenaar | 34401cc | 2014-08-29 15:12:19 +0200 | [diff] [blame] | 17 | |
| 18 | syntax case ignore |
Bram Moolenaar | 560979e | 2020-02-04 22:53:05 +0100 | [diff] [blame] | 19 | syntax match dockerfileLinePrefix /\v^\s*(ONBUILD\s+)?\ze\S/ contains=dockerfileKeyword nextgroup=dockerfileInstruction skipwhite |
| 20 | syntax region dockerfileFrom matchgroup=dockerfileKeyword start=/\v^\s*(FROM)\ze(\s|$)/ skip=/\v\\\_./ end=/\v((^|\s)AS(\s|$)|$)/ contains=dockerfileOption |
Bram Moolenaar | 34401cc | 2014-08-29 15:12:19 +0200 | [diff] [blame] | 21 | |
Bram Moolenaar | 560979e | 2020-02-04 22:53:05 +0100 | [diff] [blame] | 22 | syntax keyword dockerfileKeyword contained ADD ARG CMD COPY ENTRYPOINT ENV EXPOSE HEALTHCHECK LABEL MAINTAINER ONBUILD RUN SHELL STOPSIGNAL USER VOLUME WORKDIR |
| 23 | syntax match dockerfileOption contained /\v(^|\s)\zs--\S+/ |
Bram Moolenaar | 34401cc | 2014-08-29 15:12:19 +0200 | [diff] [blame] | 24 | |
Bram Moolenaar | ebdf3c9 | 2020-02-15 21:41:42 +0100 | [diff] [blame] | 25 | syntax match dockerfileInstruction contained /\v<(\S+)>(\s+--\S+)*/ contains=dockerfileKeyword,dockerfileOption skipwhite nextgroup=dockerfileValue |
| 26 | syntax match dockerfileInstruction contained /\v<(ADD|COPY)>(\s+--\S+)*/ contains=dockerfileKeyword,dockerfileOption skipwhite nextgroup=dockerfileJSON |
| 27 | syntax match dockerfileInstruction contained /\v<(HEALTHCHECK)>(\s+--\S+)*/ contains=dockerfileKeyword,dockerfileOption skipwhite nextgroup=dockerfileInstruction |
| 28 | syntax match dockerfileInstruction contained /\v<(CMD|ENTRYPOINT|RUN)>/ contains=dockerfileKeyword skipwhite nextgroup=dockerfileShell |
| 29 | syntax match dockerfileInstruction contained /\v<(CMD|ENTRYPOINT|RUN)>\ze\s+\[/ contains=dockerfileKeyword skipwhite nextgroup=dockerfileJSON |
| 30 | syntax match dockerfileInstruction contained /\v<(SHELL|VOLUME)>/ contains=dockerfileKeyword skipwhite nextgroup=dockerfileJSON |
Bram Moolenaar | 56c860c | 2019-08-17 20:09:31 +0200 | [diff] [blame] | 31 | |
Bram Moolenaar | 560979e | 2020-02-04 22:53:05 +0100 | [diff] [blame] | 32 | syntax region dockerfileString contained start=/\v"/ skip=/\v\\./ end=/\v"/ |
| 33 | syntax region dockerfileJSON contained keepend start=/\v\[/ skip=/\v\\\_./ end=/\v$/ contains=@JSON |
| 34 | syntax region dockerfileShell contained keepend start=/\v/ skip=/\v\\\_./ end=/\v$/ contains=@Shell |
| 35 | syntax region dockerfileValue contained keepend start=/\v/ skip=/\v\\\_./ end=/\v$/ contains=dockerfileString |
Bram Moolenaar | 34401cc | 2014-08-29 15:12:19 +0200 | [diff] [blame] | 36 | |
Kafva | 3d2a996 | 2024-07-04 11:38:00 +0200 | [diff] [blame] | 37 | syntax region dockerfileComment start=/\v^\s*#/ end=/\v$/ contains=@Spell |
Bram Moolenaar | 34401cc | 2014-08-29 15:12:19 +0200 | [diff] [blame] | 38 | |
| 39 | hi def link dockerfileString String |
| 40 | hi def link dockerfileKeyword Keyword |
| 41 | hi def link dockerfileComment Comment |
Bram Moolenaar | 560979e | 2020-02-04 22:53:05 +0100 | [diff] [blame] | 42 | hi def link dockerfileOption Special |
| 43 | |
| 44 | let b:current_syntax = "dockerfile" |