Home

Awesome

(Neo)Vim Terraform Completion with Linter - Demos

IMPORTANT: This plugin now allow version based completion

Changelog

Provider Versions

Community Provider Versions

neovim build vim build terraform version Join the chat at https://gitter.im/juliosueiras/vim-terraform-completion FOSSA Status

Terraform Module is supported(though there might be bugs)

Overview

asciicast

Block Completions

(R) for Require , (O) for Optional and (B) for Block

block completion

block 2 completion

Dependencies

Installation

Require +ruby or +ruby/dyn for vim & json gem for ruby as well

Snippets completion is done through <C-X><C-K>

NeoBundle

NeoBundle 'hashivim/vim-terraform'
NeoBundle 'vim-syntastic/syntastic'
NeoBundle 'juliosueiras/vim-terraform-completion'

Vim-Plug

Plug 'hashivim/vim-terraform'
Plug 'vim-syntastic/syntastic'
Plug 'juliosueiras/vim-terraform-completion'

Minimal Configuration

" Minimal Configuration
set nocompatible
syntax on
filetype plugin indent on

call plug#begin('~/.vim/plugged')

" (Optinal) for Tag Sidebar
" Plug 'majutsushi/tagbar'

Plug 'hashivim/vim-terraform'
Plug 'vim-syntastic/syntastic'
Plug 'juliosueiras/vim-terraform-completion'
call plug#end()

" Syntastic Config
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

" (Optional)Remove Info(Preview) window
set completeopt-=preview

" (Optional)Hide Info(Preview) window after completions
autocmd CursorMovedI * if pumvisible() == 0|pclose|endif
autocmd InsertLeave * if pumvisible() == 0|pclose|endif

" (Optional) Enable terraform plan to be include in filter
let g:syntastic_terraform_tffilter_plan = 1

" (Optional) Default: 0, enable(1)/disable(0) plugin's keymapping
let g:terraform_completion_keys = 1

" (Optional) Default: 1, enable(1)/disable(0) terraform module registry completion
let g:terraform_registry_module_completion = 0

Deoplete config

put this in your init.vim

let g:deoplete#omni_patterns = {}
let g:deoplete#omni_patterns.terraform = '[^ *\t"{=$]\w*'
let g:deoplete#enable_at_startup = 1
call deoplete#initialize()

NOTE: For newer version of deoplete if the above doesn't work


let g:deoplete#omni_patterns = {}

call deoplete#custom#option('omni_patterns', {
\ 'complete_method': 'omnifunc',
\ 'terraform': '[^ *\t"{=$]\w*',
\})

call deoplete#initialize()

Version config file

by default , all providers uses the latest version, but you can add a file call .tfcompleterc under working directory, and content can be this:

vsphere=1.0.3
aws=0.1.0

using the syatax of <provider>=<version>

Demo: asciicast

Community Providers

By default no community providers is enable, to use one, first refer to COMMUNITY_PROVIDER_VERSIONS.md , then add a .tfcompleterc to your current working dir , for ex. to use Generic REST Api Provider, the .tfcompleterc would look like

restapi=master

Specific Providers

Google Beta Provider

To use completion for google beta provider, please use .tfcompleterc and put google=beta_<version>

General Todo

<details> <summary>Todolist</summary> </details>

NOTE: enabling deep check for tflint can be a bit slow

NOTE: To use tffilter please add export PATH=$PATH:/path/to/this/plugin/bin to your bashrc or zshrc

Demo of the linter

Todo for Terraform completion

<details> <summary>Todolist</summary> </details>

Todo for HCL

Todo for Improvement

Credits

Contributors

License

FOSSA Status