Wie kann ich eine Zeichenfolge über mehrere Zeilen umbrechen?
In YAML habe ich eine Zeichenfolge, die sehr lang ist. Ich möchte dies innerhalb der 80-Spalten (oder so) Ansicht meines Editors zu halten, so I' d like to break the string. Wie lautet die Syntax dafür?
Mit anderen Worten, ich habe dies:
Key: 'this is my very very very very very very long string'
und ich hätte gerne dies (oder etwas in dieser Richtung):
Key: 'this is my very very very ' +
'long string'
Ich möchte Anführungszeichen wie oben verwenden, so dass ich nichts in der Zeichenkette auslassen muss.
1373
3
Es gibt 5 6 NEUN (oder 63*, je nachdem wie man zählt) verschiedene Möglichkeiten, mehrzeilige Strings in YAML zu schreiben.
TL;DR
Normalerweise will man
>
:Wenn Sie möchten, dass die Zeilenumbrüche als
\n
in der Zeichenkette erhalten bleiben (z. B. eingebettete Markdowns mit Absätzen), verwenden Sie|
.Verwenden Sie stattdessen
>-
oder|-
, wenn Sie keinen Zeilenumbruch am Ende wünschen.Wenn Sie Zeilen in der Mitte von Wörtern trennen oder Zeilenumbrüche wörtlich als
\n
eingeben müssen, verwenden Sie stattdessen Anführungszeichen:YAML ist verrückt.
Block skalare Stile (
>
,|
)Diese erlauben Zeichen wie
\
und"
ohne Escaping und fügen eine neue Zeile (\n
) am Ende der Zeichenkette ein.>
Folded style entfernt einzelne Zeilenumbrüche innerhalb der Zeichenkette (fügt aber einen am Ende hinzu und wandelt doppelte Zeilenumbrüche in einfache um):→ "Dies ist meine sehr, sehr lange Zeichenkette".
Literal style verwandelt jeden Zeilenumbruch innerhalb der Zeichenkette in einen literalen Zeilenumbruch und fügt am Ende einen hinzu:
→ "Dies ist meine sehr, sehr lange Zeichenkette".
Hier ist die offizielle Definition aus der [YAML Spec 1.2] (http://www.yaml.org/spec/1.2/spec.html#id2760844)
Blocksatz mit Blockumbruch-Indikator (
>-
,|-
,>+
,|+
)Sie können die Behandlung der letzten neuen Zeile in der Zeichenfolge und aller nachfolgenden Leerzeilen (
\n\n
) steuern, indem Sie ein block chomping indicator Zeichen hinzufügen:>
,|
: "clip": Der Zeilenvorschub wird beibehalten, die Leerzeilen am Ende werden entfernt.>-
,|-
: "strip": entfernt den Zeilenvorschub, entfernt die nachfolgenden Leerzeilen.>+
,|+
: "keep": Beibehaltung des Zeilenvorschubs, Beibehaltung der Leerzeilen am Ende."Flow" skalare Stile (
`,
",
'`)Diese haben ein begrenztes Escaping und konstruieren eine einzeilige Zeichenkette ohne neue Zeilenzeichen. Sie können in der gleichen Zeile wie der Schlüssel oder mit zusätzlichen Zeilenumbrüchen beginnen.
plain style (kein Escaping, keine
#
oder:
Kombinationen, Beschränkung auf das erste Zeichen):double-quoted style (
\
und"
müssen mit\
escaped werden, Zeilenumbrüche können mit einer literalen\n
-Sequenz eingefügt werden, Zeilen können ohne Leerzeichen mit nachgestelltem\
verkettet werden):→ "Dies ist mein sehr sehr langer String. Liebe Grüße, YAML." `
single-quoted style (literales
'
muss verdoppelt werden, keine Sonderzeichen, möglicherweise nützlich für die Darstellung von Strings, die mit doppelten Anführungszeichen beginnen):→
"das ist meine sehr sehr lange Zeichenkette, nicht wahr."
Zusammenfassung
In dieser Tabelle steht
_
für "Leerzeichen".\n
bedeutet "Zeilenumbruch" (\n
in JavaScript), außer in der Zeile "Zeilenumbruch", wo es wörtlich einen Backslash und ein n bedeutet).Beispiele
*Beachten Sie die Leerzeichen am Ende der Zeile vor "Leerzeichen".
Blockstile mit Einrückungsindikatoren
Falls Ihnen das nicht ausreicht, können Sie einen "Blockeinrückungsindikator" hinzufügen (nach Ihrem Blockeinrückungsindikator, falls Sie einen haben):
Nachtrag
Wenn Sie zusätzliche Leerzeichen am Anfang von nicht-ersten Zeilen im Stil "Gefaltet" einfügen, werden diese beibehalten und mit einem zusätzlichen Zeilenumbruch versehen. Dies geschieht nicht bei fließenden Stilen:
→
["mein langer String\n", "mein langer String"]
Ich kann es nicht einmal.
``2 Blockstile, jeder mit 2 möglichen Blockeinrückungsindikatoren (oder keinem), und mit 9 möglichen Einrückungsindikatoren (oder keinem), 1 einfacher Stil und 2 Anführungszeichenstile: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63*
Einige dieser Informationen sind auch [hier] zusammengefasst worden (http://yaml-multiline.info/).
Bei der Verwendung von yaml folded style wird jeder Zeilenumbruch durch ein Leerzeichen ersetzt. Der Einzug in jeder Zeile wird ignoriert. Am Ende wird ein Zeilenumbruch eingefügt.
http://symfony.com/doc/current/components/yaml/yaml_format.html
Sie können den "Blockchomping-Indikator" verwenden, um den nachgestellten Zeilenumbruch wie folgt zu eliminieren:
Es gibt auch noch andere Kontrollinstrumente (z. B. zur Steuerung der Einrückung).
Siehe https://yaml-multiline.info/
Um Neuzeilen beizubehalten, verwenden Sie z. B.
|
:wird übersetzt mit "Dies ist ein sehr langer Satz\n, der sich über mehrere Zeilen in YAML\n erstreckt, aber als String\n mit erhaltenen Zeilenumbrüchen wiedergegeben wird.\n"