2014-11-16 3 views
46

Vim non sembra reagire correttamente a un simbolo di trattino nei file YAML, quindi interrompe il formato.Riempimento errato durante la modifica di Yaml in Vim

Per esempio io ho un blocco che dovrebbe assomigliare a questo:

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

Quando finisco scrivendo restart exim4 e digitare service: Vim reindents mia ultima service linea:

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

Così chiaramente Vim cerca di allinea le frasi per colonna ma non è quello che è necessario in YAML. Voglio creare un array con due valori.

Come risolvere quello?

risposta

20

installare questo plugin:

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

E 'realizzato con Ansible in mente, ma in teoria che possa funzionare con tutti i tipi di file YAML. Dovrai: impostare filetype = ansible sfortunatamente, se non stai lavorando con file correlati ansible.

+0

Ho visto questo plug-in: si aspetta che il nome del file abbia un determinato nome e/o che si trovi in ​​una cartella specifica. I libri di testo di Ansible non sono gli unici file che ho modificato. Ecco perché non ho nemmeno provato a installarlo. Grazie, imposterò yml per avere il tipo 'ansible'. – Glueon

+0

wow, fa una grande differenza, penso che la normale sintassi 'yaml' valga anche la correzione – akostadinov

8

È possibile disattivare reindent quando si digita : chiave:

:set indentkeys-=<:> 

Si prega di modificare ~/.vimrc file e aggiungere queste righe:

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

Nota:autocmd viene dopo filetype.


È possibile attivare reindent digitando CTRL-F in INSERT modalità, ad esempio:

hello: world 
    foo: bar<C-F> 
44

Al fine di ottenere il bel YAML 2-spazio come il default quando ho colpire 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 funziona anche bene con il trattino per il risultato atteso dell'OP.

+1

Grazie, fa il lavoro. – reversiblean