Falsche Einrückung beim Bearbeiten von Yaml in Vim


90

Vim scheint bei einem Strichsymbol in YAML-Dateien nicht richtig zu reagieren, wodurch das Format beschädigt wird.

Zum Beispiel habe ich einen Block, der so aussehen sollte:

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

Wenn ich mit dem Tippen fertig bin restart exim4und service:Vim tippe, wird meine letzte serviceZeile erneut angezeigt :

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

So klar versucht Vim, Sätze spaltenweise auszurichten , aber das ist in YAML nicht erforderlich. Ich möchte ein Array mit zwei Werten erstellen.

Wie kann man das beheben?

Antworten:


25

Installieren Sie dieses Plugin:

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

Es wurde mit Blick auf Ansible erstellt, funktioniert aber theoretisch mit allen Arten von YAML-Dateien. Sie müssen: Dateityp = ansible leider setzen, wenn Sie nicht mit ansible verwandten Dateien arbeiten.


Ich habe dieses Plugin gesehen - es erwartet, dass der Dateiname einen bestimmten Namen hat und / oder sich in einem bestimmten Ordner befindet. Ansible Playbooks sind nicht die einzigen Dateien, die ich bearbeite. Deshalb habe ich nicht einmal versucht, es zu installieren. Danke, ich werde yml so einstellen, dass es den Typ 'ansible' hat.
Glueon

1
Wow, macht einen großen Unterschied, ich denke, obwohl die reguläre yamlSyntax auch eine
Korrektur

# vim:ft=ansible:Um ehrlich zu sein , wenn Sie diesen Weg gehen, müssen Sie alle Ihre nicht ansible Dateien einfügen.
Elijah Lynn

156

Um die nette 2-Leerzeichen-YAML als Standard zu erhalten, wenn ich nach dem Doppelpunkt auf Wagenrücklauf drücke, habe ich Folgendes zu meinem hinzugefügt .vimrc:

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

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


2
Danke, es macht den Job.
Gayan Weerakutti

Schön und einfach. Funktioniert mit /etc/vim/vimrc(für globale Konfiguration), während ich das vim-ansible-yamlPlugin nicht global zum Laufen bringen konnte .
Serverfehler

4
Fügen Sie es in ~ / vim / ftplugin / yaml.vim ein und ersetzen Sie kurze Namen durch lange Namen, um die zukünftige Lesbarkeit zu gewährleisten.
Exic

3
@ LeviNoecker ja nur durch Komma trennen sie soautocmd FileType yaml,yml setlocal ...
Trey Stout

2
Dies ist die Summe meiner obigen Kommentare -> gist.github.com/dragonken/c29123e597c6fdf022284cf36d245b64
Elijah Lynn

17

Sie können die erneute Einrückung deaktivieren, wenn Sie :key eingeben :

:set indentkeys-=<:>

Bitte bearbeiten Sie die ~/.vimrcDatei und fügen Sie diese Zeilen hinzu:

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

Hinweis: autocmd kommt nach filetype.


Sie können eine erneute Eingabe auslösen, indem Sie CTRL-Fim INSERT- Modus Folgendes eingeben :

hello: world
    foo: bar<C-F>

9

Mit diesem automatischen Befehl können Sie festlegen, dass Vim YAML-Dateien richtig einrückt (in Ihre .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

Grundsätzlich wird Vim für die YAML-Datei angewiesen:

  • Verwenden Sie zum Einrücken 2 Leerzeichen.
  • Verwenden Sie Leerzeichen anstelle von Tabulatoren.
  • Überspringen Sie das erneute Einrücken von Zeilen, nachdem Sie #am Anfang einer Zeile oder eines Doppelpunkts ein Kommentarzeichen ( ) eingefügt haben.

Das Hinzufügen von .yml hilft auch
Gert van den Berg

Zu was? Wo?
mr.zog

3

Sie können Ihrer YAML einen Kommentar hinzufügen, um Vim die spezielle Konfiguration für diese Datei mitzuteilen. Beispielsweise:

# 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, besonders wenn man zusammenarbeitet.


1

Hier ist das, was augroupich 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

Ich habe festgestellt, dass https://github.com/stephpy/vim-yaml großartig funktioniert. Es ist ein Vim-Plugin, das das Einrücken (und Hervorheben der Syntax) von Yaml-Dateien ausführt. Die Installation löst das spezifische Problem, nach dem Sie auch gefragt haben.

Sie müssen das Plugin installieren (siehe das Dokument im GitHub-Repo) und solange filetype=yamles Ihre Einrückung korrigiert. Es wird euch beiden helfen

  1. während Sie das von Ihnen bereitgestellte Snippet eingeben, oder
  2. Wenn Sie bereits etwas Yaml geschrieben haben, können Sie es auswählen (mit Vfür die zeilenweise Auswahl dann verwenden joder kum mehr Zeilen auszuwählen) und dann die vim-Formatierung mit auslösen=
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.