This is a vim syntax plugin for Ansible 2.x, it supports YAML playbooks, Jinja2 templates, and Ansible's hosts
files.
- YAML playbooks are detected if:
- they are in the
group_vars
orhost_vars
folder - they are in the
tasks
,roles
, orhandlers
folder and have either a .yml or .yaml suffix - they are named
playbook.y(a)ml
,site.y(a)ml
, ormain.y(a)ml
- they are in the
- Jinja2 templates are detected if they have a .j2 suffix
- Files named
hosts
will be treated as Ansible hosts files
You can also set the filetype to yaml.ansible
, *.jinja2
, or ansible_hosts
if auto-detection does not work (e.g. :set ft=yaml.ansible
or :set ft=ruby.jinja2
). Note: If you want to detect a custom pattern of your own, you can easily add this in your .vimrc
using something like this:
au BufRead,BufNewFile */playbooks/*.yml set filetype=yaml.ansible
This plugin should be quite reliable, as it sources the original formats and simply modifies the highlights as appropriate. This also enables a focus on simplicity and configurability instead of patching bad syntax detection.
examples (with solarized colorscheme)
Bright (and selective highlight) | Dim |
---|---|
Use your favorite plugin manager, or try vim-plug if you're looking for a really nice one!
vim-plug: Plug 'pearofducks/ansible-vim'
vim-plug with post-update hook: Plug 'pearofducks/ansible-vim', { 'do': 'cd ./UltiSnips; python2 generate.py' }
Note: generate.py
requires Ansible 2.4 or later.
vundle: Plugin 'pearofducks/ansible-vim'
pathogen: git clone https://github.com/pearofducks/ansible-vim ~/.vim/bundle/ansible-vim
Arch Linux: Package ansible-vim-git available on AUR
let g:ansible_unindent_after_newline = 1
When this variable is set, indentation will completely reset (unindent to column 0) after two newlines in insert-mode. The normal behavior of YAML is to always keep the previous indentation, even across multiple newlines with no content.
let g:ansible_yamlKeyName = 'yamlKey'
This option exists to provide additional compatibility with stephpy/vim-yaml.
let g:ansible_attribute_highlight = "ob"
Ansible modules use a key=value
format for specifying module-attributes in playbooks. This highlights those as specified. This highlight option is also used when highlighting key/value pairs in hosts
files.
Available flags (bold are defaults):
- a: highlight all instances of
key=
- o: highlight only instances of
key=
found on newlines - d: dim the instances of
key=
found - b: brighten the instances of
key=
found - n: turn this highlight off completely
let g:ansible_name_highlight = 'd'
Ansible modules commonly start with a name:
key for self-documentation of playbooks. This option enables/changes highlight of this.
Available flags (this feature is off by default):
- d: dim the instances of
name:
found - b: brighten the instances of
name:
found
let g:ansible_extra_keywords_highlight = 1
Note: This option is enabled when set, and disabled when not set.
Highlight the following additional keywords in playbooks: register always_run changed_when failed_when no_log args vars delegate_to ignore_errors
By default we only highlight: include until retries delay when only_if become become_user block rescue always notify
let g:ansible_normal_keywords_highlight = 'Constant'
Accepts any syntax group name from :help E669
- e.g. Comment, Constant, and Identifier
Note: Defaults to 'Statement' when not set.
This option change the highlight of the following common keywords in playbooks: include until retries delay when only_if become become_user block rescue always notify
let g:ansible_with_keywords_highlight = 'Constant'
Accepts any syntax group-name from :help E669
- e.g. Comment, Constant, and Identifier
Note: Defaults to 'Statement' when not set.
This option changes the highlight of all with_.+
keywords in playbooks.
let g:ansible_template_syntaxes = { '*.rb.j2': 'ruby' }
Accepts a dictionary in the form of 'regex-for-file': 'filetype'
.
- regex-for-file will receive the full filepath, so directory matching can be done.
- filetype is the root filetype to be applied,
jinja2
will be automatically appended
All files ending in *.j2
that aren't matched will simply get the jinja2
filetype.
It's unlikely that there will be bugs in highlighting that don't exist in the core format. Where appropriate these will be fixed in this plugin, but if the problem is with the original syntax we should probably focus on fixing that instead.
Indenting a full document - e.g with gg=G
- will not be supported and is not a goal of this plugin (unless someone else develops it!). Please do not file a bug report on this.
Suggestions for improvements are welcome, pull-requests with completed features even more so. :)