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.

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 >:

      Schlüssel: >
        Ihre lange
        Zeichenkette hier.
  • Wenn Sie möchten, dass die Zeilenumbrüche als \n in der Zeichenkette erhalten bleiben (z. B. eingebettete Markdowns mit Absätzen), verwenden Sie |.

      Schlüssel: |
        ### Überschrift
    
        * Aufzählungszeichen
        * Punkte
  • 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:

      Schlüssel: "Antidisestab
       lishmentarianism.\n\nGet on it."
  • 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):

Key: >
  this is my very very very
  long string

→ "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:

Key: |
  this is my very very very 
  long string

→ "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)

Skalare Inhalte können in Blockschreibweise geschrieben werden, wobei ein wörtlicher Stil (gekennzeichnet durch "|") verwendet wird, bei dem alle Zeilenumbrüche signifikant sind. Alternativ können sie mit dem gefalteten Stil (gekennzeichnet durch ">") geschrieben werden, bei dem jeder Zeilenumbruch zu einem Leerzeichen gefaltet wird, es sei denn, er beendet eine leere oder eine stärker eingezogene Zeile.

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):

Key: this is my very very very 
  long string

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):

Key: "this is my very very \"very\" loooo\
  ng string.\n\nLove, YAML."

→ "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):

Key: 'this is my very very "very"
  long string, isn''t it.'

"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).

                      >     |            "     '     >-     >+     |-     |+
-------------------------|------|-----|-----|-----|------|------|------|------  
Trailing spaces   | Kept | Kept |     |     |     | Kept | Kept | Kept | Kept
Single newline => | _    | \n   | _   | _   | _   | _    |  _   | \n   | \n
Double newline => | \n   | \n\n | \n  | \n  | \n  | \n   |  \n  | \n\n | \n\n
Final newline  => | \n   | \n   |     |     |     |      |  \n  |      | \n
Final dbl nl's => |      |      |     |     |     |      | Kept |      | Kept  
In-line newlines  | No   | No   | No  | \n  | No  | No   | No   | No   | No
Spaceless newlines| No   | No   | No  | \   | No  | No   | No   | No   | No 
Single quote      | '    | '    | '   | '   | ''  | '    | '    | '    | '
Double quote      | "    | "    | "   | \"  | "   | "    | "    | "    | "
Backslash         | \    | \    | \   | \\  | \   | \    | \    | \    | \
" #", ": "        | Ok   | Ok   | No  | Ok  | Ok  | Ok   | Ok   | Ok   | Ok
Can start on same | No   | No   | Yes | Yes | Yes | No   | No   | No   | No
line as key       |

Beispiele

*Beachten Sie die Leerzeichen am Ende der Zeile vor "Leerzeichen".

- >
  very "long"
  'string' with

  paragraph gap, \n and        
  spaces.
- | 
  very "long"
  'string' with

  paragraph gap, \n and        
  spaces.
- very "long"
  'string' with

  paragraph gap, \n and        
  spaces.
- "very \"long\"
  'string' with

  paragraph gap, \n and        
  s\
  p\
  a\
  c\
  e\
  s."
- 'very "long"
  ''string'' with

  paragraph gap, \n and        
  spaces.'
- >- 
  very "long"
  'string' with

  paragraph gap, \n and        
  spaces.

[
  "very \"long\" 'string' with\nparagraph gap, \\n and         spaces.\n", 
  "very \"long\"\n'string' with\n\nparagraph gap, \\n and        \nspaces.\n", 
  "very \"long\" 'string' with\nparagraph gap, \\n and spaces.", 
  "very \"long\" 'string' with\nparagraph gap, \n and spaces.", 
  "very \"long\" 'string' with\nparagraph gap, \\n and spaces.", 
  "very \"long\" 'string' with\nparagraph gap, \\n and         spaces."
]

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):

- >8
        My long string
        starts over here
- |+1
 This one
 starts here

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:

- >
    my long
      string
- my long
    string

["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/).

Kommentare (26)
Lösung

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.

Key: >
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  with only a single carriage return appended to the end.

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:

Key: >-
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  with NO carriage returns.

Es gibt auch noch andere Kontrollinstrumente (z. B. zur Steuerung der Einrückung).

Siehe https://yaml-multiline.info/

Kommentare (11)

Um Neuzeilen beizubehalten, verwenden Sie z. B. |:

|
  This is a very long sentence
  that spans several lines in the YAML
  but which will be rendered as a string
  with newlines preserved.

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"

Kommentare (12)