Niewłaściwe wcięcie podczas edycji Yaml w Vimie

91

Wydaje się, że Vim nie reaguje poprawnie na symbol myślnika w plikach YAML, przez co łamie format.

Na przykład mam blok, który powinien wyglądać tak:

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

Kiedy kończę pisać restart exim4i service:wpisuję Vim, reindentuje moją ostatnią servicelinię:

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

Tak więc wyraźnie Vim próbuje wyrównać zdania według kolumn, ale nie jest to potrzebne w YAML. Chcę utworzyć tablicę z dwiema wartościami.

Jak to naprawić?

Glueon
źródło

Odpowiedzi:

25

Zainstaluj tę wtyczkę:

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

Został stworzony z myślą o Ansible, ale teoretycznie będzie działał ze wszystkimi rodzajami plików YAML. Będziesz musiał: niestety ustawić filetype = ansible, jeśli nie pracujesz z plikami powiązanymi z ansible.

K. Norbert
źródło
Widziałem tę wtyczkę - oczekuje, że nazwa pliku ma określoną nazwę i / lub znajduje się w określonym folderze. Playbooki Ansible nie są jedynymi plikami, które edytuję. Dlatego nawet nie próbowałem go zainstalować. Dzięki, ustawię yml, aby miał typ „ansible”.
Glueon,
1
wow, robi dużą różnicę, myślę, że choć zwykła yamlskładnia też warta jest
poprawienia
Prawdę mówiąc, jeśli pójdziesz tą drogą, musisz umieścić # vim:ft=ansible:wszystkie swoje pliki, które nie są obsługiwane.
Elijah Lynn,
163

Aby uzyskać ładną 2-spację YAML jako domyślną, kiedy naciskam powrót karetki po dwukropku, dodałem to do mojego .vimrc:

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

To również dobrze pasuje do spodziewanego wyniku PO.

kiminoa
źródło
2
Dzięki, spełnia swoje zadanie.
Gayan Weerakutti
4
Rozważ umieszczenie go w ~ / vim / ftplugin / yaml.vim i zastąpienie krótkich nazw długimi, aby były czytelne w przyszłości.
exic
3
@LeviNoecker tak, po prostu oddziel je przecinkami w ten sposóbautocmd FileType yaml,yml setlocal ...
Trey Stout
2
Aby to zadziałało, musiałem filetype plugin indent onnajpierw. Miły jest też syntax onwcześniejszy akcent .
Elijah Lynn
4
To jest suma moich komentarzy powyżej -> gist.github.com/dragonken/c29123e597c6fdf022284cf36d245b64
Elijah Lynn
20

Możesz wyłączyć reindent po wpisaniu :klucza:

:set indentkeys-=<:>

Edytuj ~/.vimrcplik i dodaj następujące wiersze:

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

Uwaga: autocmd następuje po filetype.


Możesz wywołać reindent, wpisując CTRL-Fw trybie INSERT , na przykład:

hello: world
    foo: bar<C-F>
kev
źródło
11

Możesz użyć tej autokomendy, aby Vim poprawnie wcinał pliki YAML (umieść to w swoim .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

Zasadniczo, dla pliku YAML instruuje Vima, aby:

  • Użyj 2 spacji na wcięcia.
  • Użyj spacji zamiast tabulatorów.
  • Pomiń ponowne wcięcie wierszy po wstawieniu znaku komentarza ( #) na początku wiersza lub dwukropka.
Eugene Yarmash
źródło
Dodanie .yml również pomaga
Gert van den Berg
Do czego? Gdzie?
pan Zog
3

Możesz dodać komentarz w swoim YAML, aby powiedzieć Vimowi o specjalnej konfiguracji dla tego pliku. Na przykład:

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

Wtedy każdy, kto używa tego pliku z domyślnym vimem, może współdzielić konfigurację twórcy pliku. Sprawdza się szczególnie podczas współpracy.

Yan QiDong
źródło
1

Oto augroupmam dla yamla:

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
Mosze
źródło
0

Odkryłem, że https://github.com/stephpy/vim-yaml działa świetnie. Jest to wtyczka Vima, która wykonuje wcięcia (i podświetlanie składni) plików yaml. Zainstalowanie go rozwiązuje konkretny problem, o który również pytałeś.

Musisz zainstalować wtyczkę (zobacz dokumentację w repozytorium GitHub) i pod warunkiem, filetype=yamlże poprawi ona Twoje wcięcia. Pomoże wam obojgu

  1. podczas wpisywania podanego fragmentu kodu lub
  2. jeśli masz już napisane yaml, możesz go wybrać ( Vza pomocą do wyboru linii, a następnie użyj jlub, kaby wybrać więcej linii), a następnie uruchom formatowanie vima za pomocą=
Tom Saleeba
źródło