Browse Source

vim: ++terraform

Maxim Likhachev 5 years ago
parent
commit
e8ea16e56d
  1. 2
      etc/soft/nvim/ftdetect/detect.vim
  2. 126
      etc/soft/nvim/syntax/terraform.vim

2
etc/soft/nvim/ftdetect/detect.vim

@ -58,6 +58,8 @@ au BufNewFile,BufRead *.rename set filetype=rename @@ -58,6 +58,8 @@ au BufNewFile,BufRead *.rename set filetype=rename
au BufNewFile,BufRead Vagrantfile set filetype=ruby
au BufNewFile,BufRead *.tf setlocal filetype=terraform
" Открывать справку в вертикальном окне
au! BufEnter * if &ft ==# 'help' | wincmd L | endif

126
etc/soft/nvim/syntax/terraform.vim

@ -0,0 +1,126 @@ @@ -0,0 +1,126 @@
" Vim syntax file
" Language: Terraform (http://terraform.io)
" Maintainer: Larry Gilbert <larry@L2G.to>
" Last Change: 2014-08-09
"
" Thanks to OpenLogic for their syntax-highlighting primer
" (http://www.openlogic.com/wazi/bid/188101/Create-Your-Own-Syntax-
" Highlighting-in-Vim)
"
" ++ jgerry/terraform-vim-folding
"
if exists("b:current_syntax")
finish
endif
syn case match
syn keyword terraSection connection output provider variable
syn keyword terraValueBool true false on off yes no
""" resource
" find . -name "resource_*.go" -not -name "resource_*_test.go" -not -name "resource_provider.go" | sed 's/.*\/resource_//; s/\.go$//'
syn keyword terraResourceTypeBI
\ aws_autoscaling_group aws_security_group
\ aws_db_instance aws_subnet
\ aws_db_security_group aws_vpc
\ aws_eip cloudflare_record
\ aws_elb consul_keys
\ aws_instance digitalocean_domain
\ aws_internet_gateway digitalocean_droplet
\ aws_launch_configuration digitalocean_record
\ aws_route53_record dnsimple_record
\ aws_route53_zone heroku_addon
\ aws_route_table heroku_app
\ aws_route_table_association heroku_domain
\ aws_s3_bucket heroku_drain
\
\ contained
syn match terraResource /resource/ nextgroup=terraResourceTypeStr skipwhite
syn region terraResourceTypeStr start=/"/ end=/"/ contains=terraResourceTypeBI
\ nextgroup=terraResourceName skipwhite
syn region terraResourceName start=/"/ end=/"/
\ nextgroup=terraResourceBlock skipwhite
syn region terraResourceBlock start=/{/ end=/}/ fold
\ contains=@terraConfigItem
""" provider
syn match terraProvider /provider/ nextgroup=terraProviderName skipwhite
syn region terraProviderName start=/"/ end=/"/ nextgroup=terraProviderBlock skipwhite
syn region terraProviderBlock start=/{/ end=/}/ fold contains=@terraConfigItem
""" misc.
syn match terraCommentSingle "#.*$"
syn match terraAssignment "\<[a-z][a-z0-9_-]*\>" contained skipwhite
\ nextgroup=terraAssignmentOp
syn match terraAssignmentOp "=" nextgroup=@terraValue skipwhite
syn match terraValueDec "\<[0-9]\+\([kKmMgG]b\?\)\?\>"
syn match terraValueHexaDec "\<0x[0-9a-f]\+\([kKmMgG]b\?\)\?\>"
syn region terraCommentMulti start=/\/\*/ end=/\*\//
syn region terraValueString start=/"/ end=/"/ contains=terraStringInterp
syn region terraStringInterp matchgroup=terraBrackets start=/\${/ end=/}/ contained
syn cluster terraConfigItem contains=terraAssignment
syn cluster terraBlock contains=terraProviderBlock,terraResourceBlock
syn cluster terraValue contains=terraValueBool,terraValueDec,
\terraValueHexaDec,terraValueString
highlight link terraCommentMulti Comment
highlight link terraCommentSingle Comment
highlight link terraAssignment Identifier
highlight link terraAssignmentOp Operator
highlight link terraBrackets Operator
highlight link terraProvider Structure
highlight link terraProviderBlock Delimiter
highlight link terraProviderName String
highlight link terraResource Structure
highlight link terraResourceBlock Delimiter
highlight link terraResourceName String
highlight link terraResourceTypeBI Tag
highlight link terraResourceTypeStr String
highlight link terraSection Structure
highlight link terraStringInterp Identifier
highlight link terraValueBool Boolean
highlight link terraValueDec Number
highlight link terraValueHexaDec Number
highlight link terraValueString String
function! TerraformFolds()
let thisline = getline(v:lnum)
if match(thisline, '^resource') >= 0
return ">1"
elseif match(thisline, '^provider') >= 0
return ">1"
elseif match(thisline, '^module') >= 0
return ">1"
elseif match(thisline, '^variable') >= 0
return ">1"
elseif match(thisline, '^output') >= 0
return ">1"
elseif match(thisline, '^data') >= 0
return ">1"
elseif match(thisline, '^locals') >= 0
return ">1"
elseif match(thisline, '^terraform') >= 0
return ">1"
else
return "="
endif
endfunction
setlocal foldmethod=expr
setlocal foldexpr=TerraformFolds()
setlocal foldlevel=0
function! TerraformFoldText()
let foldsize = (v:foldend-v:foldstart)
return getline(v:foldstart).' ('.foldsize.' lines)'
endfunction
setlocal foldtext=TerraformFoldText()
let b:current_syntax = "terraform"
Loading…
Cancel
Save