web-dev-qa-db-fra.com

Mauvais retrait lors de l'édition de Yaml dans Vim

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?

67
Glueon

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.

23
K. Norbert

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.

88
kiminoa

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:autocmdvient après filetypename__.


Vous pouvez déclencher le rappel en tapant CTRL-F en mode INSERT, par exemple:

hello: world
    foo: bar<C-F>
14
kev

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.

1
Yan QiDong

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
0
Moshe

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:

  • Utilisez 2 espaces pour l'indentation. 
  • Utilisez des espaces plutôt que des tabulations. 
  • Ignorez les lignes qui sont en retrait après avoir inséré un caractère de commentaire (#) au début d'une ligne ou un deux-points.
0
Eugene Yarmash

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

  1. pendant que vous tapez l'extrait que vous avez fourni, ou
  2. si vous avez déjà écrit un yaml, vous pouvez le sélectionner (avec 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 =
0
Tom Saleeba