Sangría incorrecta al editar Yaml en Vim

90

Vim no parece reaccionar correctamente ante un símbolo de guión en los archivos YAML, por lo tanto, rompe el formato.

Por ejemplo, tengo un bloque que debería verse así:

  handlers:
        - name: restart exim4
          service: name=exim4 state=restarted

Cuando termino de escribir restart exim4y service:escribo Vim reindents mi última servicelínea:

  handlers:
        - name: restart exim4
        service: name=exim4 state=restarted

Entonces, claramente, Vim intenta alinear las oraciones en columnas, pero eso no es lo que se necesita en YAML. Quiero crear una matriz con dos valores.

¿Cómo arreglar eso?

Glueon
fuente

Respuestas:

25

Instale este complemento:

https://github.com/chase/vim-ansible-yaml

Está hecho con Ansible en mente, pero en teoría funcionará con todo tipo de archivos YAML. Tendrá que: configurar filetype = ansible desafortunadamente, si no está trabajando con archivos relacionados con ansible.

K. Norbert
fuente
Vi este complemento: espera que el nombre de archivo tenga un nombre determinado y / o esté en una carpeta específica. Los libros de jugadas de Ansible no son los únicos archivos que edito. Por eso ni siquiera intenté instalarlo. Gracias, configuraré yml para que tenga el tipo 'ansible'.
Glueon
1
wow, hace una gran diferencia, creo que aunque yamlvale la pena corregir la sintaxis regular
akostadinov
La verdad, si sigue esta ruta, debe poner # vim:ft=ansible:todos sus archivos no ansible.
Elijah Lynn
159

Para obtener el YAML agradable de 2 espacios como predeterminado cuando presiono el retorno de carro después de los dos puntos, agregué esto a mi .vimrc:

autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab

Esto también juega bien con el guión para el resultado esperado del OP.

kiminoa
fuente
2
Gracias, hace el trabajo.
Gayan Weerakutti
Agradable y sencillo. Funciona con /etc/vim/vimrc(para configuración global) mientras que no pude hacer que el vim-ansible-yamlcomplemento funcione a nivel mundial.
Fallo del servidor
4
Considere ponerlo en ~ / vim / ftplugin / yaml.vim y reemplazar los nombres cortos con nombres largos para facilitar la lectura en el futuro.
exic
3
@LeviNoecker sí, solo sepárelos con comas asíautocmd FileType yaml,yml setlocal ...
Trey Stout
2
Esta es la suma de mis comentarios anteriores -> gist.github.com/dragonken/c29123e597c6fdf022284cf36d245b64
Elijah Lynn
18

Puede deshabilitar reindentrar cuando escribe la :clave:

:set indentkeys-=<:>

Edite el ~/.vimrcarchivo y agregue estas líneas:

filetype plugin indent on
autocmd FileType yaml setl indentkeys-=<:>

Nota: autocmd viene después filetype.


Puede activar la reintroducción escribiendo CTRL-Fen el modo INSERT , por ejemplo:

hello: world
    foo: bar<C-F>
kev
fuente
9

Puede usar este autocomando para hacer que Vim sangra correctamente los archivos YAML (póngalo en su .vimrc):

" Fix auto-indentation for YAML files
augroup yaml_fix
    autocmd!
    autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab indentkeys-=0# indentkeys-=<:>
augroup END

Básicamente, para el archivo YAML, le indica a Vim que:

  • Utilice 2 espacios para la sangría.
  • Utilice espacios en lugar de tabulaciones.
  • Omita la re-sangría de líneas después de insertar un carácter de comentario ( #) al principio de una línea, o dos puntos.
Eugene Yarmash
fuente
Agregar .yml también ayuda
Gert van den Berg
¿A qué? ¿Dónde?
mr.zog
3

Puede agregar un comentario en su YAML para indicarle a Vim una configuración especial para este archivo. Por ejemplo:

# vim: set shiftwidth=2 tabstop=2 softtabstop=-1 expandtab:
foo:
  bar:
  - a
  - b

Entonces, todos los que usen este archivo con un vim predeterminado, pueden compartir la configuración del creador del archivo. Funciona bien especialmente cuando se coopera.

Yan QiDong
fuente
1

Aquí está el augroupque tengo para 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
Moshe
fuente
0

Descubrí que https://github.com/stephpy/vim-yaml funciona muy bien. Es un complemento vim que hace sangría (y resaltado de sintaxis) de archivos yaml. La instalación también resuelve el problema específico sobre el que ha preguntado.

Debe instalar el complemento (consulte el documento en el repositorio de GitHub) y, siempre que filetype=yamllo haga, corregirá la sangría. Los ayudará a ambos

  1. mientras escribe el fragmento que proporcionó, o
  2. si ya tiene escrito algo de yaml, puede seleccionarlo (con Vpara la selección en línea y luego usar jo kpara seleccionar más líneas) y luego activar el formato vim con=
Tom Saleeba
fuente