Yaml'ı Vim'de düzenlerken yanlış girinti


91

Vim, YAML dosyalarındaki kısa çizgi sembolüne doğru tepki vermiyor, bu nedenle biçimi bozuyor.

Örneğin şöyle görünmesi gereken bir bloğum var:

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

Yazmayı bitirdiğimde restart exim4ve service:yazdığımda Vim son satırımı hatırlatıyor service:

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

Açıkça Vim cümleleri sütun bazında hizalamaya çalışıyor ama YAML'de gerekli olan bu değil. İki değerli bir dizi oluşturmak istiyorum.

Bunu nasıl düzeltebilirim?

Yanıtlar:


25

Bu eklentiyi yükleyin:

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

Ansible düşünülerek yapılmıştır, ancak teoride her türlü YAML dosyasıyla çalışacaktır. İlgili dosyalarla çalışmıyorsanız, maalesef filetype = ansible ayarlamanız gerekecek.


Bu eklentiyi gördüm - dosya adının belirli bir ada sahip olmasını ve / veya belirli bir klasörde olmasını bekliyor. Düzenlediğim tek dosya Ansible oyun kitapları değil. Bu yüzden yüklemeyi denemedim bile. Teşekkürler, yml'yi 'ansible' türüne sahip olacak şekilde ayarlayacağım.
Glueon

1
vay, büyük bir fark yaratıyor, sanırım normal yamlsözdizimi düzeltmeye değer olsa da
akostadinov

Doğrusu, bu rotaya giderseniz, # vim:ft=ansible:yanıtlanamayan tüm dosyalarınızı koymanız gerekir.
Elijah Lynn

163

İki nokta üst üste işaretinden sonra satır başı dönüşüne bastığımda 2 boşluklu güzel YAML'yi varsayılan olarak almak için şunu ekledim .vimrc:

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

Bu aynı zamanda OP'nin beklenen sonucu için çizgi ile iyi oynuyor.


2
Teşekkürler, işi yapar.
Gayan Weerakutti

4
~ / Vim / ftplugin / yaml.vim içine koymayı ve ileride okunabilirlik için kısa adları uzun adlarla değiştirmeyi düşünün.
exic

3
@LeviNoecker evet onları virgülle ayırınautocmd FileType yaml,yml setlocal ...
Trey Stout

2
Bunun işe yaraması için filetype plugin indent onönce sahip olmalıydım . Ayrıca bundan syntax onönce sahip olmak da hoş bir dokunuş .
Elijah Lynn

4
Bu, yukarıdaki yorumlarımın toplamı -> gist.github.com/dragonken/c29123e597c6fdf022284cf36d245b64
Elijah Lynn

20

:Anahtar yazarken yeniden başlamayı devre dışı bırakabilirsiniz :

:set indentkeys-=<:>

Lütfen ~/.vimrcdosyayı düzenleyin ve şu satırları ekleyin:

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

Not: autocmd sonra gelir filetype.


Yazarak reindent tetikleyebilir CTRL-Fiçinde INSERT örneğin modu:

hello: world
    foo: bar<C-F>

10

Bu otomatik komutu, Vim'in YAML dosyalarına doğru şekilde girintilemesi yapmak için kullanabilirsiniz (bunu kendi dosyanıza koyun .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

Temel olarak, YAML dosyası için Vim'e şunları söyler:

  • Girinti için 2 boşluk kullanın.
  • Sekmeler yerine boşluklar kullanın.
  • #Bir satırın başına veya iki nokta üst üste bir açıklama karakteri ( ) ekledikten sonra satırları yeniden girintileme atlayın .

.Yml eklemek de yardımcı olur
Gert van den Berg

Neye? Nerede?
mr.zog

3

Bu dosya için Vim'e özel yapılandırmayı bildirmek için YAML'nize bir yorum ekleyebilirsiniz. Örneğin:

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

Ardından, bu dosyayı varsayılan bir vim ile kullanan herkes, dosya oluşturucunun yapılandırmasını paylaşabilir. Özellikle işbirliği yaparken iyi çalışıyor.


1

İşte augroupyaml için sahip olduğum şey:

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

Harika çalışmak için https://github.com/stephpy/vim-yaml buldum . Yaml dosyalarının girintisini (ve söz dizimi vurgulamasını) yapan bir vim eklentisidir. Yüklemek, sorduğunuz belirli sorunu da çözer.

Eklentiyi kurmanız gerekir (GitHub deposundaki doco'ya bakın) ve filetype=yamlgirintilerinizi düzelttiği sürece . İkinize de yardım edecek

  1. sağladığınız pasajı yazarken veya
  2. Halihazırda yazılmış bir yaml'nız varsa, onu seçebilir ( Vsatır bazında seçim için ile daha sonra jveya kdaha fazla satır seçmek için) ve ardından vim biçimlendirmesini tetikleyebilirsiniz.=
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.