Rientro sbagliato durante la modifica di Yaml in Vim


90

Vim non sembra reagire correttamente al simbolo di un trattino nei file YAML, quindi rompendo il formato.

Ad esempio, ho un blocco che dovrebbe assomigliare a questo:

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

Quando finisco di digitare restart exim4e service:digito, Vim reindirizza la mia serviceriga finale :

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

Quindi chiaramente Vim cerca di allineare le frasi a livello di colonna, ma non è quello che è necessario in YAML. Voglio creare un array con due valori.

Come risolverlo?

Risposte:


25

Installa questo plugin:

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

È stato creato pensando ad Ansible, ma in teoria funzionerà con tutti i tipi di file YAML. Dovrai: impostare filetype = ansible sfortunatamente, se non stai lavorando con file correlati ansible.


Ho visto questo plugin: si aspetta che il nome del file abbia un certo nome e / o si trovi in ​​una cartella specifica. I playbook Ansible non sono gli unici file che modifico. Ecco perché non ho nemmeno provato a installarlo. Grazie, imposterò yml per avere il tipo "ansible".
Glueon

1
wow, fa una grande differenza, penso anche se yamlvale la pena correggere anche la sintassi regolare
akostadinov

In verità, se segui questa strada devi inserire # vim:ft=ansible:tutti i tuoi file non ansible.
Elijah Lynn

159

Per ottenere il simpatico YAML a 2 spazi come predefinito quando premo il ritorno a capo dopo i due punti, ho aggiunto questo al mio .vimrc:

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

Questo gioca bene anche con il trattino per il risultato atteso dell'OP.


2
Grazie, fa il lavoro.
Gayan Weerakutti

Bello e semplice. Funziona con /etc/vim/vimrc(per la configurazione globale) mentre non sono riuscito a far funzionare il vim-ansible-yamlplugin a livello globale.
Errore del server

4
Considera l'idea di metterlo in ~ / vim / ftplugin / yaml.vim e di sostituire i nomi brevi con nomi lunghi per una futura leggibilità.
exic

3
@LeviNoecker sì, separali con una virgola in questo modoautocmd FileType yaml,yml setlocal ...
Trey Stout

2
Questa è la somma dei miei commenti sopra -> gist.github.com/dragonken/c29123e597c6fdf022284cf36d245b64
Elijah Lynn

18

Puoi disabilitare il reindentamento quando digiti :key:

:set indentkeys-=<:>

Modifica il ~/.vimrcfile e aggiungi queste righe:

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

Nota: autocmd viene dopo filetype.


Puoi attivare il reindentamento digitando CTRL-Fin modalità INSERT , ad esempio:

hello: world
    foo: bar<C-F>

9

Puoi usare questo comando automatico per far rientrare correttamente i file YAML di Vim (mettilo nel tuo .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

Fondamentalmente, per il file YAML istruisce Vim a:

  • Usa 2 spazi per il rientro.
  • Usa spazi invece di tabulazioni.
  • Salta il rientro delle righe dopo aver inserito un carattere di commento ( #) all'inizio di una riga o due punti.

Anche l'aggiunta di .yml aiuta
Gert van den Berg

A cosa? Dove?
mr.zog

3

Puoi aggiungere un commento nel tuo YAML per dire a Vim una configurazione speciale per questo file. Per esempio:

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

Quindi tutti coloro che utilizzano questo file con un vim predefinito possono condividere la configurazione del creatore del file. Funziona bene soprattutto quando si collabora.


1

Ecco quello augroupche ho per 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

Ho scoperto che https://github.com/stephpy/vim-yaml funziona alla grande. È un plugin vim che fa il rientro (e l'evidenziazione della sintassi) dei file yaml. Installandolo risolve il problema specifico che hai chiesto anche tu.

È necessario installare il plug-in (vedere il documento nel repository GitHub) e finché il tuo filetype=yamlcorreggerà il rientro. Ti aiuterà entrambi

  1. mentre digiti lo snippet che hai fornito, o
  2. se hai già un po 'di yaml scritto, puoi selezionarlo (con Vper la selezione in linea quindi usa jo kper selezionare più linee) quindi attivare la formattazione di vim con=
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.