it-swarm.com.de

Falscher Einzug beim Bearbeiten von Yaml in Vim

Vim scheint nicht korrekt auf ein Bindestrich-Symbol in YAML-Dateien zu reagieren, wodurch das Format beschädigt wird.

Ich habe zum Beispiel einen Block, der so aussehen sollte:

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

Wenn ich restart exim4 fertig eingegeben habe und service: eingebe, zeigt Vim meine letzte service-Zeile erneut an:

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

Vim versucht also, die Sätze spaltenweise auszurichten -, aber das ist in YAML nicht nötig. Ich möchte ein Array mit zwei Werten erstellen.

Wie kann ich das beheben?

67
Glueon

Installieren Sie dieses Plugin:

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

Es ist für Ansible gedacht, funktioniert aber theoretisch mit allen Arten von YAML-Dateien. Sie müssen Folgendes tun: set filetype = ansible, wenn Sie nicht mit verwandten Dateien arbeiten.

23
K. Norbert

Um die Nice 2-space YAML als Standard zu erhalten, wenn Sie nach dem Doppelpunkt auf Wagenrücklauf klicken, fügte ich dies meinem .vimrc hinzu:

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

Dies spielt auch Nizza mit dem Strich für das erwartete Ergebnis des OP.

88
kiminoa

Sie können Reindent deaktivieren, wenn Sie : key eingeben:

:set indentkeys-=<:>

Bitte editieren Sie die Datei ~/.vimrc und fügen Sie diese Zeilen hinzu:

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

Anmerkung:autocmd steht nach filetype.


Sie können einen erneuten Einzug durch Eingabe auslösen CTRL-F im INSERT Modus, zum Beispiel:

hello: world
    foo: bar<C-F>
14
kev

Sie können einen Kommentar in Ihre YAML einfügen, um Vim die spezielle Konfiguration für diese Datei mitzuteilen. Zum Beispiel:

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

Dann kann jeder, der diese Datei mit einem Standard-VIM verwendet, die Konfiguration des Dateierstellers freigeben. Es funktioniert gut, vor allem bei der Zusammenarbeit.

1
Yan QiDong

Hier ist die augroup, die ich für yaml habe:

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
Moshe

Sie können diesen automatischen Befehl verwenden, um Vim das Einrücken von YAML-Dateien zu erleichtern (setzen Sie es in Ihren .vimrc):

autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab indentkeys-=0# indentkeys-=<:>

Grundsätzlich weist Vim für YAML-Dateien an:

  • Verwenden Sie 2 Leerzeichen für die Einrückung. 
  • Verwenden Sie Leerzeichen anstelle von Registerkarten. 
  • Überspringen Sie das Einrücken von Zeilen nach dem Einfügen eines Kommentarzeichens (#) am Zeilenanfang oder Doppelpunkt.
0
Eugene Yarmash

Ich habe https://github.com/stephpy/vim-yaml gefunden, um super zu funktionieren. Es ist ein vim-Plugin, das Einrückung (und Syntaxhervorhebung) von yaml-Dateien vornimmt. Durch die Installation wird das spezifische Problem gelöst, nach dem Sie ebenfalls gefragt haben.

Sie müssen das Plugin installieren (siehe das Doco im GitHub-Repo) und solange Ihr filetype=yaml das Einrücken korrigiert. Es wird euch beiden helfen

  1. während Sie den Ausschnitt eingeben, den Sie bereitgestellt haben, oder
  2. wenn Sie bereits etwas yaml geschrieben haben, können Sie es auswählen (mit V für die zeilenweise Auswahl, verwenden Sie j oder k, um weitere Zeilen auszuwählen) und lösen Sie die vim-Formatierung mit =
0
Tom Saleeba