In YAML habe ich eine Zeichenfolge, die sehr lang ist. Ich möchte dies in der 80-Spalten-Ansicht (oder so) meines Editors belassen, daher möchte ich die Zeichenfolge unterbrechen. Wie lautet die Syntax dafür?
Mit anderen Worten, ich habe Folgendes:
Key: 'this is my very very very very very very long string'
und ich möchte dies (oder etwas in diesem Sinne) haben:
Key: 'this is my very very very ' +
'long string'
Ich möchte Anführungszeichen wie oben verwenden, damit ich nichts innerhalb der Zeichenfolge umgehen muss.
{{- 'key'|trans -}}
geht auch nicht.Es gibt
56NEUN (oder 63 *, je nachdem, wie Sie zählen) verschiedene Möglichkeiten, mehrzeilige Zeichenfolgen in YAML zu schreiben.TL; DR
Normalerweise möchten Sie
>
:Wenn Sie möchten, dass die Zeilenumbrüche wie
\n
in der Zeichenfolge beibehalten werden (z. B. eingebetteter Markdown mit Absätzen), verwenden Sie|
.Verwenden Sie
>-
oder|-
stattdessen, wenn am Ende kein Zeilenumbruch angehängt werden soll.Wenn Sie Zeilen in der Mitte von Wörtern teilen oder Zeilenumbrüche buchstäblich als eingeben müssen
\n
, verwenden Sie stattdessen doppelte Anführungszeichen:YAML ist verrückt.
Block skalare Stile (
>
,|
)Diese erlauben Zeichen wie
\
und"
ohne Escapezeichen und fügen\n
am Ende Ihrer Zeichenfolge eine neue Zeile ( ) hinzu.>
Der gefaltete Stil entfernt einzelne Zeilenumbrüche innerhalb der Zeichenfolge (fügt jedoch am Ende eine hinzu und konvertiert doppelte Zeilenumbrüche in Singles):→
this is my very very very long string\n
|
Der wörtliche Stil verwandelt jede neue Zeile in der Zeichenfolge in eine wörtliche neue Zeile und fügt am Ende eine hinzu:→
this is my very very very\nlong string\n
Hier ist die offizielle Definition aus der YAML-Spezifikation 1.2
Block Stile mit Block scharrt 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-Indikatorzeichen hinzufügen :>
,|
: "clip": Zeilenvorschub beibehalten, nachgestellte Leerzeilen entfernen.>-
,|-
: "Streifen": Entfernen Sie den Zeilenvorschub, entfernen Sie die nachgestellten Leerzeilen.>+
,|+
: "behalten": Zeilenvorschub beibehalten, Leerzeilen nachziehen."Flow" Skalar Arten (
,
"
,'
)Diese haben ein begrenztes Escapezeichen und erstellen eine einzeilige Zeichenfolge ohne neue Zeilenzeichen. Sie können in derselben Zeile wie der Schlüssel oder zuerst mit zusätzlichen Zeilenumbrüchen beginnen.
einfacher Stil (kein Entkommen, Nein
#
oder:
Kombinationen, Begrenzung des ersten Zeichens):Stil in doppelten Anführungszeichen (
\
und"
muss\
maskiert werden, Zeilenumbrüche können mit einer Literalfolge eingefügt\n
werden, Zeilen können ohne Leerzeichen mit nachgestelltenZeichenverkettet werden\
):→
"this is my very very \"very\" loooong string.\n\nLove, YAML."
Stil in einfachen Anführungszeichen (Literal
'
muss verdoppelt werden, keine Sonderzeichen, möglicherweise nützlich, um Zeichenfolgen auszudrücken, die mit doppelten Anführungszeichen beginnen):→
"this is my very very \"very\" long string, isn't it."
Zusammenfassung
In dieser Tabelle
_
bedeutetspace character
.\n
bedeutet "Zeilenumbruch" (\n
in JavaScript), mit Ausnahme der Zeile "Zeilenumbruch", in der es wörtlich einen Backslash und ein n bedeutet.Beispiele
Beachten Sie die nachgestellten Leerzeichen in der Zeile vor "Leerzeichen".
Blockstile mit Einrückungsindikatoren
Nur für den Fall, dass Ihnen das oben Genannte nicht ausreicht, können Sie einen " Blockeinrückungsindikator " hinzufügen (nach Ihrem Blockzusammensetzungsindikator, falls vorhanden):
Nachtrag
Wenn Sie am Anfang von nicht den ersten Zeilen im gefalteten Stil zusätzliche Leerzeichen einfügen, werden diese mit einem Bonus-Zeilenumbruch beibehalten. Dies ist bei Flow-Stilen nicht der Fall:
→
["my long\n string\n", "my long string"]
Ich kann nicht einmal.
*
2 Blockstile mit jeweils 2 möglichen Block-Chomping-Indikatoren (oder keine) und mit 9 möglichen Einrückungsindikatoren (oder keine), 1 einfachen Stil und 2 zitierten Stilen: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63Einige dieser Informationen auch zusammengefasst hier .
quelle
"..." + "..."
in den meisten Programmiersprachen oder Backslash vor Newline in Bash schreiben würde .:
innerhalb eines Strings in einem String-Array YAML ihn als Array von Objekten interpretieren. Es verstößt gegen das Prinzip des geringsten Erstaunens .Zur Erhaltung newlines Verwendung
|
, zum Beispiel:wird übersetzt in "Dies ist ein sehr langer Satz \ n , der mehrere Zeilen in der YAML \ n umfasst, aber als Zeichenfolge \ n mit beibehaltenen Zeilenumbrüchen gerendert wird . \ n "
quelle
|
in jeder Zeile wiederholen , aus Gründen, die mir nicht klar sind: groups.google.com/forum/#!topic/pandoc-discuss/xuqEmhWgf9Acat
mit Trennzeichen werden der Ausgabe führende Leerzeichen (die für YAML erforderlich sind) hinzugefügt.1. Blocknotation (einfach, im Flow-Stil, skalar): Zeilenumbrüche werden zu Leerzeichen und zusätzlichen Zeilenumbrüchen, nachdem der Block entfernt wurde
Äquivalentes JSON
2. Literaler Blockskalar: Ein wörtlicher Blockskalar | enthält die Zeilenumbrüche und alle nachgestellten Leerzeichen. entfernt aber extra
Zeilenumbrüche nach dem Block.
Äquivalentes JSON
3. + Indikator mit Literal Block Scalar: Halten Sie zusätzliche Zeilenumbrüche nach dem Block
Äquivalentes JSON
4. - Indikator mit Literal Block Scalar: - bedeutet, dass die neue Zeile am Ende der Zeichenfolge entfernt wird.
Äquivalentes JSON
5. Gefalteter Blockskalar (>):
Faltet Zeilenumbrüche in Leerzeichen und entfernt zusätzliche Zeilenumbrüche nach dem Block.
Äquivalentes JSON
Für mehr kannst du meinen Blog besuchen
quelle
Sie werden es vielleicht nicht glauben, aber YAML kann auch mehrzeilige Tasten ausführen:
quelle
key:value
, aber wenn Ihr Schlüssel eine neue Zeile enthält, können Sie dies wie oben beschrieben tun?
ist der Schlüsselindikator (wie im Schlüssel in einem Mapping). In vielen Situationen können Sie den Schlüsselindikator weglassen, wenn der (erforderliche) Wertindikator:
nach dem Schlüssel das Parsen eindeutig macht. Dies ist jedoch nicht der Fall. Sie müssen dies verwenden, um den Schlüssel explizit zu markieren.Um lange Zeilen ohne Leerzeichen zu verketten , verwenden Sie doppelte Anführungszeichen und schließen Sie die Zeilenumbrüche mit umgekehrten Schrägstrichen:
(Danke @Tobia)
quelle
Wenn Sie YAML und Twig für Übersetzungen in Symfony verwenden und mehrzeilige Übersetzungen in Javascript verwenden möchten, wird direkt nach der Übersetzung ein Wagenrücklauf hinzugefügt. Also auch der folgende Code:
var javascriptVariable = "{{- 'key'|trans -}}";
Welches hat die folgende yml Übersetzung:
Wird immer noch den folgenden Code in HTML ergeben:
Das Minuszeichen in Twig löst dies also nicht. Die Lösung besteht darin, dieses Minuszeichen nach dem Größer-als-Zeichen in yml einzufügen:
Wird das richtige Ergebnis haben, mehrzeilige Übersetzung in einer Zeile in Twig:
quelle
In Situationen, in denen die Zeichenfolge Leerzeichen enthalten könnte oder nicht, bevorzuge ich doppelte Anführungszeichen und Zeilenfortsetzung mit umgekehrten Schrägstrichen:
Beachten Sie jedoch die Gefahr für den Fall, dass eine Fortsetzungslinie mit einem Leerzeichen beginnt und maskiert werden muss (da sie an anderer Stelle entfernt wird):
Wenn die Zeichenfolge Zeilenumbrüche enthält, muss diese im C-Stil geschrieben werden
\n
.Siehe auch diese Frage .
quelle
Keine der oben genannten Lösungen hat für mich in einer YAML-Datei innerhalb eines Jekyll-Projekts funktioniert. Nachdem ich viele Optionen ausprobiert hatte, wurde mir klar, dass eine HTML-Injection mit
<br>
auch funktionieren könnte, da am Ende alles in HTML gerendert wird:Name:
|
In einem Dorf von La Mancha, an<br>
dessen Namen ich mich nicht<br>
erinnern möchte.Zumindest funktioniert es bei mir. Keine Ahnung zu den mit diesem Ansatz verbundenen Problemen.
quelle