Awesome
terraform-mode.el
![melpa stable badge](https://stable.melpa.org/packages/terraform-mode-badge.svg)
Major mode of Terraform configuration file
Screenshot
imenu(helm-imenu
)
Installation
You can install terraform-mode.el
from MELPA by package.el
.
Features
- Syntax highlighting
- Indentation
- imenu
- Formatting using
terraform fmt
- Block folding
- easier access to Terraform resource documentation
Block folding
terraform-mode
sets up outline-mode
variables for block folding.
To use outline-mode
for block folding, enable outline-minor-mode
in terraform-mode-hook
:
(add-hook 'terraform-mode-hook #'outline-minor-mode)
You can use outline-toggle-children
bound to C-c C-f
to toggle
visibility of a block at point.
We also provide function terraform-toggle-or-indent
which
folds-or-indents. It is not bound by default, but you can bind it to
TAB
or any other key.
Access to Terraform resource documentation
Within a resource
or a data
block, type C-c C-d C-w
to open a new
browser tab with the resource or data documentation page.
Type C-c C-d C-c
to kill the URL (i.e. copy it to the clipboard) for the documentation page rather than directly open it in the browser.
You can also type C-c C-d C-r
to insert a comment containing a link to
this documentation right above the resource or data block.
This feature requires either:
- a
required_provider
declaration in any.tf
file in current directory (see Terraform doc) - a working
terraform providers
command. This command may require a valid token (at least for AWS).
Customize Variables
terraform-indent-level
(Default: 2
)
Indentation size. You need to call revert-buffer
if you change this value outer of hook such as eval-expression
.
terraform-format-on-save
(Default nil
)
Set to t
to automatically format the buffer on save.
Sample Configuration
(custom-set-variables
'(terraform-indent-level 4))
With use-package
(use-package terraform-mode
;; if using straight
;; :straight t
;; if using package.el
;; :ensure t
:custom (terraform-indent-level 4)
:config
(defun my-terraform-mode-init ()
;; if you want to use outline-minor-mode
;; (outline-minor-mode 1)
)
(add-hook 'terraform-mode-hook 'my-terraform-mode-init))
See Also
This major-mode inherits from hcl-mode. Most of syntax features, like highlighting, indentation are implemented in hcl-mode.