Created
October 12, 2010 02:43
-
-
Save tjstein/621586 to your computer and use it in GitHub Desktop.
vcl.vim
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Vim syntax file | |
" Filename: vcl.vim | |
" Language: Varnish configuation Language, http://www.varnish-cache.org/wiki/VCL | |
" Maintainer: Elan Ruusamäe <[email protected]> | |
" Version Info: $Revision: 1.7 $ | |
" Last Change: $Date: 2010/04/06 08:24:28 $ UTC | |
" For version 5.x: Clear all syntax items | |
" For version 6.x: Quit when a syntax file was already loaded | |
if version < 600 | |
syntax clear | |
elseif exists("b:current_syntax") | |
finish | |
endif | |
" TODO | |
" - sub ... | |
" - backend/director/... | |
" - acl ... | |
" - error when invalid operator used in if (...) | |
" - +=, = operators | |
" - functions | |
" Code Blocks | |
" sub NAME { | |
" backend NAME { | |
" director NAME FLAGS { | |
" acl NAME { | |
"syn region vclCodeBlock start="\s*\<sub\|backend\|director\|acl\>" end="{"he=e-1 contains=vclCodeBlockName,vclFunctionName | |
"syn match vclCodeBlockName "\<sub\|backend\|director\|acl\>" contained | |
"syn match vclFunctionName "\h[[:alnum:]_:]*" contained | |
"syn match vclFunctionName "\h\w*[^:]" contained | |
" | |
syn keyword vclOperator set call return error esi synthetic include remove unset | |
" return modes | |
syn keyword vclModes deliver pipe pass hash lookup discard fetch restart | |
" C strings | |
syn region vclString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=vclSpecial | |
syn match vclSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)" | |
syn match vclSpecialError "L\='\\[^'\"?\\abfnrtv]'" | |
syn match vclSpecialCharacter "L\='\\['\"?\\abfnrtv]'" | |
syn match vclSpecialCharacter display "L\='\\\o\{1,3}'" | |
syn match vclSpecialCharacter display "'\\x\x\{1,2}'" | |
syn match vclSpecialCharacter display "L'\\x\x\+'" | |
syn keyword vclConditional if else elsif elseif | |
" Numbers | |
syn match vclNumbers display transparent "\<\d\|\.\d" contains=vclNumber,vclNumberTime | |
syn match vclNumber display contained "\d\+" | |
" set obj.ttl = 0s, 0m; | |
syn match vclNumberTime display contained "\d\+[dhsm]" | |
" client | |
syn match vclOption /client\.ip/ | |
" server | |
syn match vclOption /server\.\(ip\|port\)/ | |
" req | |
syn match vclOption /req\.\(hash\|request\|url\|proto\|backend\.healthy\|backend\|grace\|xid\|restarts\)/ | |
" bereq. | |
syn match vclOption /bereq\.\(request\|url\|proto\|connect_timeout\|first_byte_timeout\|between_bytes_timeout\)/ | |
" obj | |
syn match vclOption /obj\.\(proto\|status\|response\|cacheable\|ttl\|lastuse\|hits\|hash\|grace\|prefetch\)/ | |
" resp | |
syn match vclOption /resp\.\(proto\|status\|response\)/ | |
" common: http.HEADERNAME | |
syn match vclOption /\(req\|bereq\|resp\|obj\)\.http\.[A-Za-z][-_A-Za-z0-9]*/ | |
" Highlight the C block | |
syn include @vclC syntax/c.vim | |
unlet b:current_syntax | |
" Mark block tags itself as comment | |
syn region vclCBlock matchgroup=vclComment start=/C{/ end=/}C/ contains=@vclC keepend | |
" Synthetic | |
syn region vclSynthetic start=/{"/hs=s+2 end=/"}/he=e-2 contains=@vclHTML keepend | |
" Allow html in synthetic | |
syn include @vclHTML syntax/html.vim | |
unlet b:current_syntax | |
syn match vclComment '#.*' | |
syn match vclComment "//.*" | |
syn region vclComment start="/\*" end="\*/" | |
syn sync ccomment vclComment | |
hi link vclCodeBlock Function | |
hi link vclComment Comment | |
hi link vclStatement Statement | |
hi link vclFunctionName Identifier | |
hi link vclCodeBlockName Statement | |
hi link vclSpecial SpecialChar | |
hi link vclString String | |
hi link vclConditional Conditional | |
hi link vclSynthetic vclString | |
hi link vclSpecialCharacter vclSpecialSpecial | |
hi link vclOperator Operator | |
hi link vclModes Operator | |
hi link vclOption Identifier | |
hi link vclNumber Number | |
hi link vclNumberTime Number |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment