Vim ne semble pas réagir correctement à un symbole de tiret dans les fichiers YAML, cassant ainsi le format.
Par exemple, j'ai un bloc qui devrait ressembler à ceci:
handlers:
- name: restart exim4
service: name=exim4 state=restarted
Quand j'ai fini de taper restart exim4
et de taper service:
Vim réindente ma dernière ligne service
:
handlers:
- name: restart exim4
service: name=exim4 state=restarted
Donc, clairement, Vim essaie d'aligner les phrases en colonnes mais ce n'est pas ce qui est nécessaire dans YAML. Je veux créer un tableau avec deux valeurs.
Comment résoudre ce problème?
Installez ce plugin:
https://github.com/chase/vim-ansible-yaml
Il est conçu avec Ansible, mais en théorie, il fonctionnera avec toutes sortes de fichiers YAML. Vous devrez malheureusement: définir filetype = ansible si vous ne travaillez pas avec des fichiers liés à ansible.
Pour obtenir le Nice YAML à 2 espaces comme valeur par défaut lorsque je clique sur retour chariot après les deux points, j'ai ajouté ceci à mon .vimrc
:
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab
Cela joue également Nice avec le tiret pour le résultat attendu de l'OP.
Vous pouvez désactiver le rappel lorsque vous tapez la clé :
:
:set indentkeys-=<:>
Veuillez éditer le fichier ~/.vimrc
et ajouter les lignes suivantes:
filetype plugin indent on
autocmd FileType yaml setl indentkeys-=<:>
Remarque:autocmd
vient après filetype
name__.
Vous pouvez déclencher le rappel en tapant CTRL-F en mode INSERT, par exemple:
hello: world
foo: bar<C-F>
Vous pouvez ajouter un commentaire dans votre YAML pour indiquer à Vim la configuration spéciale de ce fichier. Par exemple:
# vim: set shiftwidth=2 tabstop=2 softtabstop=-1 expandtab:
foo:
bar:
- a
- b
Ensuite, tous ceux qui utilisent ce fichier avec un vim par défaut peuvent partager la configuration du créateur du fichier. Cela fonctionne bien surtout en coopérant.
Voici la augroup
que j'ai pour yaml:
augroup filetype_yaml
autocmd!
autocmd BufNewFile,BufReadPost *.{yaml,yml} set filetype=yaml foldmethod=indent
autocmd FileType yaml |
setlocal shiftwidth=2 |
setlocal softtabstop=2 |
setlocal tabstop=2
augroup END
Vous pouvez utiliser cette commande automatique pour que Vim indente correctement les fichiers YAML (placez-le dans votre .vimrc
):
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab indentkeys-=0# indentkeys-=<:>
Fondamentalement, pour un fichier YAML, il demande à Vim de:
#
) au début d'une ligne ou un deux-points.J'ai trouvé https://github.com/stephpy/vim-yaml pour travailler très bien. C'est un plugin vim qui effectue l'indentation (et la coloration syntaxique) des fichiers yaml. L'installation résout le problème spécifique que vous avez également posé.
Vous devez installer le plugin (voir le doco dans le dépôt GitHub) et tant que votre filetype=yaml
il corrigera votre retrait. Ça vous aidera tous les deux
V
pour une sélection ligne par ligne puis utilisez j
ou k
pour sélectionner plus de lignes) puis déclenchez le formatage vim avec =