Zum Inhalt springen
Aback Tools Logo

Kommentieren in YAML: Syntax, Regeln und Stolperfallen

Kommentieren in YAML: die #-Syntax, erforderliches Leerzeichen vor Inline-Kommentaren, Mehrzeilen-Konventionen, wo Kommentare das Parsen brechen, Kommentarentfernung für die Produktion und Validierung kommentierter YAML-Dateien.

DH
Tutorials & How-Tos11 Min. Lesezeit2,600 Wörter

YAML hat genau ein Kommentarzeichen: das Raute-Symbol. Jede andere Frage zu YAML-Kommentaren — wie man mehrere Zeilen abdeckt, wo die Raute verboten ist, warum Ihr Inline-Kommentar einen Wert abgeschnitten hat, ob Parser Kommentare erhalten — führt zurück zum Verständnis dieser einen Regel und ihrer Ränder. Dieser Leitfaden deckt alles ab, von der grundlegenden Syntax bis zu Produktions-Workflows zum Entfernen und Validieren kommentierter YAML-Dateien.

1Kommentarzeichen# ist das einzige in YAML
0Block-DelimiterKein /* */-Äquivalent vorhanden
100%Vom Parser verworfenKommentare erreichen Ihre App nie

Grundlagen der YAML-Kommentarsyntax

In YAML beginnt ein Kommentar mit einem `#`-Zeichen und erstreckt sich bis zum Zeilenende. Alles ab `#` — nur auf dieser Zeile — wird vom Parser ignoriert. Es gibt keine schließenden Delimiter, keine Blockkommentar-Syntax und keine Möglichkeit, einen Kommentar mitten in einem Wert zu platzieren. Ein Zeichen, eine Regel, keine Ausnahmen.

Das Kommentarzeichen und das erforderliche Leerzeichen

Die YAML-Spezifikation hat eine wichtige Nuance, über die viele Entwickler stolpern: Ein Inline-Kommentar muss mindestens einem Whitespace-Zeichen vorangestellt sein. Eine `#`, die direkt an ein Nicht-Whitespace-Zeichen angehängt ist, wird nicht als Kommentar behandelt — sie wird als Teil des umgebenden Skalarwerts geparst. Das ist vor allem wichtig, wenn man Kommentare nach Werten auf derselben Zeile hinzufügt.

  • Korrekter Inline-Kommentar: `timeout: 30 # seconds` - Leerzeichen vor `#` vorhanden
  • Falscher Inline-Kommentar: `timeout: 30# seconds` - kein Leerzeichen, `#` wird Teil des Werts
  • Eigenständige Kommentarzeile: `# This whole line is a comment` - kein Wert davor
  • Eingerückter Kommentar: ` # Indented comment inside a block` - Einrückung ist in Ordnung

Warning

Die fehlende-Leerzeichen-Regel ist die häufigste Quelle stiller YAML-Bugs im Zusammenhang mit Kommentaren. Manche tolerante Parser übersehen sie; strikte, spec-konforme Parser werfen entweder einen Fehler oder liefern einen unerwarteten Wert. Fügen Sie immer ein Leerzeichen vor Ihrem Inline-`#` ein.

Kommentarsyntax auf einen Blick

Dies sind die drei gültigen Platzierungsmuster für Kommentare in YAML. Jede andere Variante ist entweder identisch mit einer davon oder ungültig:

  • Kommentar am Zeilenanfang: `# comment text` - in Spalte 0 oder nach führenden Leerzeichen
  • Inline-Kommentar nach einem Skalar: `key: value # comment` - ein oder mehrere Leerzeichen vor `#`
  • Inline-Kommentar nach einem Listenelement: `- item # comment` - gleiche Leerzeichenregel

Wo Kommentare erlaubt sind

Kommentare sind in der großen Mehrheit der Stellen eines YAML-Dokuments legal. Die wenigen Orte zu kennen, an denen sie es nicht sind, hilft Ihnen, verwirrende Parse-Fehler zu vermeiden, die Kommentare überhaupt nicht erwähnen.

Erlaubte Positionen

  • Vor jedem Schlüssel-Wert-Paar: platzieren Sie Dokumentationskommentare über dem Schlüssel in einer eigenen Zeile
  • Nach jedem Skalarwert auf derselben Zeile: `retries: 3 # max attempts`
  • Nach einem Listenelement: `- production # primary environment`
  • Nach einem Mapping-Schlüssel (noch ohne Wert): `database: # configured below`
  • Auf Leerzeilen zwischen Blöcken: nutzen Sie Kommentarzeilen frei als visuelle Trenner
  • Am Anfang der Datei: Dokumentationskommentare auf Dateiebene sind in Kubernetes- und CI/CD-Configs üblich

Die Dokument-Start- und End-Marker

Kommentare sind auch vor und nach den YAML-Dokument-Markern `---` (Dokumentanfang) und `...` (Dokumentende) gültig. So lassen sich Metadaten-Kommentare auf Dateiebene vor dem Dokumentkörper in Multi-Document-YAML-Streams hinzufügen.

PositionBeispielKommentar erlaubt?
Eigenständige Zeile# Full-line comment✓ Ja
Nach Skalarwertkey: value # note✓ Ja (Leerzeichen nötig)
Nach Listenelement- item # note✓ Ja (Leerzeichen nötig)
Vor Dokumentanfang# Header\n---✓ Ja
In quotierter Zeichenkette"Say # hello"✗ Nein - # ist literal
In einem Blockskalar|\n line # note✗ Nein - # ist literal
In einer Flow-Sequenz[a, b # note, c]✗ Nein - Syntaxfehler
In einem Flow-Mapping{a: 1 # note, b: 2}✗ Unzuverlässig

Note

GitHub-Actions-Workflow-Dateien, Docker-Compose-Dateien, Kubernetes-Manifeste und Ansible-Playbooks verwenden alle standard YAML-Parser, die Kommentare vollständig unterstützen. Sie können und sollten diese Dateien mit Inline- und Blockkommentaren dokumentieren — sie werden beim Parsen verworfen und beeinflussen das Laufzeitverhalten nie.

Mehrzeilige und Blockkommentare

YAML hat keine Blockkommentar-Syntax. Es gibt kein `/* ... */`-Äquivalent, kein `#!`-Heredoc und keine Möglichkeit, einen Kommentar in einer Zeile zu öffnen und in einer anderen zu schließen. Um mehrere aufeinanderfolgende Zeilen auszukommentieren, müssen Sie jede Zeile einzeln mit `#` präfixieren.

Ein Kommentar ist ein Raute-Zeichen, gefolgt von Zeichen, die keine Zeilenumbrüche enthalten, und reicht bis - aber nicht einschließlich - dem nächsten Zeilenumbruch. Ein Kommentar wird als Leerraum behandelt.

- YAML-1.2-Spezifikation, Abschnitt 6.6

Das konventionelle Blockkommentar-Muster

Aufeinanderfolgende `#`-Zeilen werden visuell als Blockkommentar interpretiert, obwohl jede Zeile technisch ein eigenständiger Einzelzeilen-Kommentar ist. Das ist die universelle Konvention in YAML-Dateien über alle Ökosysteme hinweg — Kubernetes, GitHub Actions, Docker Compose, Helm-Charts und CI/CD-Pipelines nutzen alle dieses Muster:

  • `# -----------------------------------------`
  • `# Database configuration`
  • `# Update connection strings before deploying`
  • `# -----------------------------------------`

Editor-Shortcuts für mehrzeiliges Kommentieren

Jeder wichtige Code-Editor unterstützt das Umschalten von Kommentaren über mehrere ausgewählte Zeilen in YAML-Dateien. Wählen Sie die Zeilen aus, die Sie auskommentieren möchten, und nutzen Sie den Umschalt-Shortcut — der Editor fügt `#` am Anfang jeder ausgewählten Zeile hinzu oder entfernt es gleichzeitig. Mehrzeiliges Kommentieren ist damit in YAML so schnell wie in jeder anderen Sprache.

  • VS Code: Strg+/ (Windows/Linux) oder Cmd+/ (macOS) - schaltet # auf ausgewählten Zeilen um
  • JetBrains-IDEs (IntelliJ, PyCharm, GoLand): Strg+/ oder Cmd+/ - gleiches Verhalten
  • Vim/Neovim: Visual-Block-Modus (Strg+V), Zeilen auswählen, I, # tippen, Esc
  • Emacs: M-; oder comment-region mit installiertem YAML-Modus
  • Sublime Text / TextMate: Strg+/ oder Cmd+/ - schaltet # auf allen ausgewählten Zeilen um

Tip

Um schnell einen großen YAML-Block auszukommentieren, platzieren Sie den Cursor am Anfang der ersten Zeile, halten Sie Shift, klicken Sie auf die letzte Zeile, um den Bereich auszuwählen, und drücken Sie Strg+/ (oder Cmd+/ auf dem Mac). Jeder oben gelistete Editor unterstützt dies in YAML-Dateien ohne zusätzliche Konfiguration.

Wo Kommentare Dinge brechen

Kommentare sind in den meisten YAML-Kontexten sicher, aber es gibt vier konkrete Situationen, in denen eine falsch platzierte `#` entweder einen stillen Datenfehler oder einen harten Parse-Fehler erzeugt. Diese im Voraus zu kennen, erspart stundenlanges verwirrendes Debugging.

1

Innerhalb quotierter Zeichenketten

Eine `#` innerhalb einer einfach oder doppelt quotierten Zeichenkette ist immer ein literales Zeichen, nie ein Kommentar. `message: "Hello # world"` speichert die Zeichenkette `Hello # world`. Das ist korrekt und beabsichtigt. Das Problem entsteht bei nicht quotierten Zeichenketten: `message: Hello # world` speichert `Hello` und behandelt `# world` als Kommentar — und schneidet Ihren Wert still ab. Quotezeichen Sie jeden nicht quotierten String-Wert, der legitim eine `#` enthält.

2

Innerhalb von Blockskalaren (literal | und gefaltet >)

Innerhalb von Blockskalar-Inhalt — den eingerückten Zeilen nach einem `|`- oder `>`-Indikator — hat das `#`-Zeichen keine besondere Bedeutung. Es wird als literales Zeichen behandelt und in die Zeichenkette aufgenommen. Sie können Zeilen in einem Blockskalar nicht auskommentieren. Wenn Sie Inhalt ausschließen müssen, müssen Sie ihn vollständig entfernen statt auszukommentieren.

3

Innerhalb von Flow-Sammlungen ([ ] und { })

Flow-Sequenzen und Flow-Mappings werden in einer einzigen Zeile geschrieben. Eine Raute innerhalb einer Flow-Sammlung ist entweder ein Syntaxfehler oder erzeugt je nach Parser ein unerwartetes Parse-Ergebnis. Wenn Sie einzelne Elemente einer Flow-Sammlung annotieren müssen, konvertieren Sie sie in Blockstil (ein Element pro Zeile), wo Inline-Kommentare korrekt funktionieren.

4

Nackte # ohne vorangestelltes Leerzeichen

Wie im Grundlagen-Abschnitt behandelt, wird eine `#`, der kein Whitespace vorangestellt ist, von spec-konformen Parseuren nicht als Kommentar erkannt. Der Wert `port: 8080#dev` wird als Zeichenkette `8080#dev` geparst, nicht als Ganzzahl `8080` mit Kommentar. Schreiben Sie immer `port: 8080 # dev` mit dem Leerzeichen.

Warning

Der Fall der stillen Abschneidung — nicht quotierter Wert gefolgt von ` # comment` — ist besonders gefährlich, weil er keinen Fehler erzeugt. Ihr YAML parst erfolgreich, aber der Wert ist kürzer als beabsichtigt. Führen Sie den [YAML-Validator](/tools/data/validators/yaml-validator) über jede Datei aus, in der Sie Inline-Kommentare hinzugefügt haben, um zu bestätigen, dass alle Werte wie erwartet geparst wurden.

Kommentare für die Produktion entfernen

Entwicklerorientierte YAML-Dateien sind oft stark kommentiert zu Dokumentationszwecken. Dieselben Dateien müssen möglicherweise an APIs, Deployment-Tools oder Konfigurationsverwaltungssysteme übergeben werden, die Kommentare either ablehnen oder unnötigen Parsing-Overhead hinzufügen. Kommentare vor der Übertragung zu entfernen, ist die saubere Lösung.

Wann Sie Kommentare entfernen müssen

  • API-Endpunkte, die kommentiertes YAML ablehnen - manche REST-APIs parsen YAML-Request-Bodies und werfen bei Kommentaren einen Fehler
  • Serialisierungs-Roundtrips von Configs - Laden und erneutes Schreiben von YAML mit Standard-Parsern entfernt Kommentare stillschweigend
  • Reduzierung von Diff-Rauschen - beim Review von Config-Änderungen fokussieren kommentarbefeite YAML-Diffs tatsächliche Wertänderungen
  • Dateigrößen-Optimierung - stark kommentierte Kubernetes-Manifeste können ohne Kommentare deutlich kleiner sein
  • Automatisierte Verarbeitungspipelines - Skripte, die YAML transformieren, brauchen oft saubere Eingaben ohne Kommentar-Behandlungslogik

YAML-Kommentar-Entferner

Fügen Sie ein beliebiges YAML-Dokument ein und entfernen Sie alle Kommentare sofort - saubere Ausgabe, bereit zum Kopieren, Herunterladen oder Übergeben an eine API. Läuft vollständig in Ihrem Browser ohne Uploads.

Open tool

Was die Kommentarentfernung ändert und nicht ändert

Ein korrektes Kommentarentfernungs-Tool entfernt nur den Kommentartext — das `#` und alles danach auf dieser Zeile — ohne Werte, Schlüssel, Einrückung oder Struktur zu verändern. Eigenständige Kommentarzeilen werden durch Leerzeilen ersetzt oder vollständig entfernt. Das resultierende YAML parst für alle Datenwerte identisch zum Original.

Note

Die Kommentarentfernung ist auf der Datenseite eine verlustfreie Operation — das geparste YAML-Objekt ist vor und nach dem Entfernen byteidentisch. Die einzige verlorene Information ist die menschenlesbare Dokumentation; deshalb sollten Sie die kommentierte Quellversion stets in der Versionskontrolle behalten und Kommentare nur für Deployment oder Übertragung entfernen.

Entfernen per Code (Python und Node.js)

Wenn Sie Kommentare programmatisch als Teil einer Pipeline entfernen müssen, ist der einfachste Ansatz in jeder Standard-YAML-Bibliothek ein Load-then-Dump-Roundtrip: Das YAML in eine Datenstruktur parsen und sofort wieder serialisieren. Kommentare werden beim Laden verworfen und beim Schreiben nie ausgegeben. Die Ausgabe ist gültiges YAML mit identischen Daten, aber ohne Kommentare. In Python erledigt `PyYAML` das in zwei Zeilen. Für Node.js macht `js-yaml` dasselbe.

YAML-Kommentarmuster aus der Praxis

Gut kommentierte YAML-Dateien folgen konsistenten Mustern, die sie leichter wartbar, reviewbar und an Teammitglieder übergebbar machen. Diese Muster finden sich in Kubernetes-Manifesten, GitHub-Actions-Workflows, Docker-Compose-Dateien und Helm-Chart-Values-Dateien.

Datei-Header-Kommentare

Platzieren Sie einen Block von Kommentaren ganz oben in der Datei, um Zweck, Verantwortlichen und jeden kritischen Kontext zu dokumentieren, der nicht offensichtlich aus dem Inhalt allein hervorgeht. Das ist Standardpraxis in Kubernetes-Manifesten und Ansible-Playbooks. Der Kommentarblock enthält typischerweise den Zweck der Datei, das Datum der letzten Änderung und einen Link zu verwandter Dokumentation oder Tickets.

Abschnittstrenner-Kommentare

Lange YAML-Dateien — insbesondere `docker-compose.yml` und Helm-`values.yaml`-Dateien mit Dutzenden Top-Level-Schlüsseln — profitieren von visuellen Abschnittstrennern, die Lesern die Orientierung erleichtern. Eine Zeile wie `# -----------------------------------------------` oder `# === DATABASE CONFIG ===` vor einer logischen Schlüsselgruppe ist eine weit verbreitete Konvention. Nutzen Sie den YAML-Anchors-und-Aliases-Validator, um zu prüfen, dass Ihre Anchors und Aliases korrekt sind, wenn Sie stark kommentierte Dateien umstrukturieren.

Inline-Dokumentation für nicht offensichtliche Werte

Inline-Kommentare sind am wertvollsten für Werte, die sich nicht selbst erklären — magische Zahlen, umgebungsspezifische Overrides, Werte in nicht offensichtlichen Einheiten oder Felder mit Interdependenzen. Ein Kommentar wie `timeout: 300 # seconds; must match nginx keepalive_timeout` ist weit nützlicher als der Wert allein. Beim Arbeiten mit Umgebungsvariablen-Substitution in YAML-Configs hilft das YAML-Env-Substitutions-Vorschau-Tool, zu prüfen, wie kommentierte Defaults mit Laufzeit-Overrides interagieren.

  • Einheiten dokumentieren: `memory: 512 # MB - increase to 1024 for production`
  • Interdependenzen kennzeichnen: `enabled: false # also disable in config/prod.yaml`
  • Defaults erklären: `workers: 4 # matches CPU core count on t3.medium`
  • Vor erforderlichen Änderungen warnen: `host: localhost # CHANGE before deploying`
  • Externe Docs referenzieren: `algorithm: RS256 # see RFC 7518, section 3.3`

Tip

Halten Sie Inline-Kommentare kurz — unter 60 Zeichen —, damit sie bei Standard-Terminalbreiten nicht vom Bildschirm laufen. Wenn die Erklärung mehr als einen Satz erfordert, verschieben Sie sie in eine eigene Kommentarzeile über dem Schlüssel, statt sie inline zu quetschen.

Kommentiertes YAML validieren

Das Hinzufügen von Kommentaren zu einer YAML-Datei schafft neue Gelegenheiten für Syntaxfehler, die nicht sofort offensichtlich sind — eine `#` in einer nicht quotierten Zeichenkette, ein fehlendes Leerzeichen vor einem Inline-Kommentar oder ein versehentlicher Kommentar in einem Blockskalar. Nach dem Bearbeiten einer kommentierten YAML-Datei einen Validator auszuführen, ist eine schnelle Versicherung gegen diese Probleme.

Was der YAML-Validator erkennt

Der YAML-Validator parst Ihr Dokument gemäß der YAML-1.2-Spezifikation und meldet alle Syntaxfehler mit Zeilen- und Spaltennummern. Er erkennt falsch platzierte Kommentare, beim Hinzufügen von Kommentarzeilen entstandene Einrückungsfehler, doppelte Schlüssel und ungültige Skalarformate. Fügen Sie Ihr YAML direkt ein — kein Datei-Upload, keine Anmeldung, und nichts verlässt Ihren Browser.

YAML-Validator

Validieren Sie jedes YAML-Dokument gemäß der YAML-1.2-Spec - erkennt kommentarbezogene Syntaxfehler, Einrückungsprobleme und doppelte Schlüssel mit präzisen Zeilennummern.

Open tool

Doppelte Schlüssel in annotierten Dateien erkennen

Wenn Entwickler ein Schlüssel-Wert-Paar auskommentieren und darunter einen Ersatz hinzufügen, sind doppelte Schlüssel ein häufiges Ergebnis. Beispiel: `timeout: 30` auskommentieren und darunter `timeout: 60` hinzufügen lässt die kommentierte Version inaktiv — aber wenn der Kommentar versehentlich entfernt wird oder die Datei von einem Tool verarbeitet wird, das Kommentare entfernt, wird das Duplikat aktiv und der niedrigere Wert gewinnt still (oder erzeugt einen Fehler, je nach Parser). Der YAML-Duplicate-Key-Detector erkennt diese, bevor sie Probleme verursachen.

Formatkonvertierung mit intakten Kommentaren

Wenn Sie JSON mit dem JSON-zu-YAML-Konverter in YAML umwandeln, beachten Sie, dass die Ausgabe keine Kommentare enthält — JSON hat keine Kommentarsyntax, also gibt es keine Kommentare zu übertragen. Alle Dokumentationskommentare, die Sie in der YAML-Ausgabe wünschen, müssen nach der Konvertierung manuell hinzugefügt werden. Ebenso kann das YAML-Merge-Tool die Platzierung von Kommentaren in zusammengeführten Dateien beeinflussen, je nachdem, wie das Merging durchgeführt wird.


YAML-Configs vor und nach Änderungen vergleichen

Beim Review von Änderungen an kommentierten YAML-Konfigurationen — besonders in Pull Requests — hebt der Diff-Highlighter für JSON/YAML-Configs bedeutsame Wertänderungen getrennt von reinen Kommentar-Änderungen hervor. Das beschleunigt das Code-Review und verringert das Risiko, eine versehentliche Wertänderung zu genehmigen, die in einem Diff voller Kommentar-Updates vergraben ist.

Key takeaways

  • YAML verwendet ein einziges Kommentarzeichen: `#`. Alles von `#` bis zum Zeilenende ist ein Kommentar.
  • Inline-Kommentare erfordern ein Leerzeichen vor `#` - `value# comment` ohne das Leerzeichen ist ein Syntaxfehler oder erzeugt einen unerwarteten Wert.
  • YAML hat keine Blockkommentar-Syntax - kommentieren Sie mehrere Zeilen aus, indem Sie jede einzeln mit `#` präfixieren.
  • Eine `#` in quotierten Zeichenketten und Blockskalaren ist immer ein literales Zeichen, nie ein Kommentar.
  • Kommentare sind für Parser unsichtbar - sie werden beim Laden verworfen und können von PyYAML, js-yaml oder keiner Standardbibliothek zurückgelesen werden.
  • Nutzen Sie den YAML-Kommentar-Entferner, um Kommentare zu entfernen, bevor Sie YAML an APIs oder Deployment-Tools übergeben.
  • Validieren Sie immer mit dem YAML-Validator, nachdem Sie Inline-Kommentare hinzugefügt haben, um stille Wertabschneide-Bugs zu erkennen.

Häufige Fragen

Start the line with a # character, optionally preceded by whitespace. Everything from the # to the end of that line is treated as a comment and ignored by the parser. For example: # This is a comment. You can also add an inline comment after a value by placing a space before the #: timeout: 30 # seconds. The leading space before # is required by the YAML spec for inline comments.

Yes - YAML supports comments using the # character. Any text from # to the end of the line is a comment. What YAML does not support is a multi-line block comment delimiter (like /* ... */ in C). To comment out multiple lines you must prefix each line individually with #. This is a deliberate simplicity choice in the YAML spec.

Prefix each line with # individually. YAML has no block comment syntax. Most code editors support multi-line comment toggling - select the lines and press Ctrl+/ (or Cmd+/ on Mac) to add # to every selected line at once. In VS Code, this works in any .yaml or .yml file automatically.

Yes. Inline comments are placed after a value with a space before the # character - for example: retries: 3 # max retry attempts. The space before # is required. Without it, some parsers will either error or treat the # as part of the value. Always include the space: value # comment, never value# comment.

Standard YAML parsers - including PyYAML in Python and js-yaml in Node.js - discard comments during parsing. The in-memory object you get back contains only the data, not the comments. If you need to round-trip YAML with comments preserved, you need a round-trip-capable library like ruamel.yaml in Python or yaml (the newer library) in Node.js, both of which maintain a comment-aware AST.

No - a # inside a quoted string is not a comment, it is a literal character. For example: message: "Say # hello" stores the string "Say # hello" with the # included. Inside an unquoted value, an unescaped # preceded by a space would start a comment and truncate the value. Always quote strings that need to contain # literally.

Yes - all three use standard YAML parsers and fully support # comments. Comments are widely used in GitHub Actions workflows and Kubernetes manifests to document intent. Docker Compose also parses standard YAML, so comments are safe in docker-compose.yml files. The only risk is if you programmatically generate or transform these files using a library that strips comments.

Strip comments before sending YAML to APIs that reject or choke on comments, when minimising file size for network transmission, or when diffing config changes where comments create noise. Use the YAML Comment Remover tool to do this cleanly without risking syntax changes to the underlying data.

ShareXLinkedIn