In YAML, how do I break a string over multiple lines?

In YAML, I have a string that's very long. I want to keep this within the 80-column (or so) view of my editor, so I'd like to break the string. What's the syntax for this?

In other words, I have this:

Key: 'this is my very very very very very very long string'

and I'd like to have this (or something to this effect):

Key: 'this is my very very very ' +
     'long string'

I'd like to use quotes as above, so I don't need to escape anything within the string.


Using yaml folded style, each line break is replaced by a space. The indention in each line will be ignored.

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

http://symfony.com/doc/current/components/yaml/yaml_format.html


There are 5 6 NINE (or 63*, depending how you count) different ways to write multi-line strings in YAML.

Block scalar styles ( > , | )

These allow characters such as and " without escaping, and add a new line ( n ) to the end of your string.

> Folded style removes single newlines within the string (but adds one at the end, and converts double newlines to singles):

Key: >
  this is my very very very
  long string

→ this is my very very very long stringn

| Literal style turns every newline within the string into a literal newline, and adds one at the end:

Key: |
  this is my very very very 
  long string

→ this is my very very verynlong stringn

Here's the official definition from the YAML Spec 1.2

Scalar content can be written in block notation, using a literal style (indicated by “|”) where all line breaks are significant. Alternatively, they can be written with the folded style (denoted by “>”) where each line break is folded to a space unless it ends an empty or a more-indented line.

Block styles with block chomping indicator ( >- , |- , >+ , |+ )

You can control the handling of the final new line in the string, and any trailing blank lines ( nn ) by adding a block chomping indicator character:

  • > , | : "clip": keep the line feed, remove the trailing blank lines.
  • >- , |- : "strip": remove the line feed, remove the trailing blank lines.
  • >+ , |+ : "keep": keep the line feed, keep trailing blank lines.
  • "Flow" scalar styles ( , " , ' )

    These have limited escaping, and construct a single-line string with no new line characters. They can begin on the same line as the key, or with additional newlines first.

    plain style (no escaping, no # or : combinations, limits on first character):

    Key: this is my very very very 
      long string
    

    double-quoted style ( and " must be escaped by , newlines can be inserted with a literal n sequence, lines can be concatenated without spaces with trailing ):

    Key: "this is my very very "very" loooo
      ng string.nnLove, YAML."
    

    → "this is my very very "very" loooong string.nnLove, YAML."

    single-quoted style (literal ' must be doubled, no special characters, possibly useful for expressing strings starting with double quotes):

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

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

    Summary

    In this table, _ means space character . n means "newline character" ( n in JavaScript), except for the "in-line newlines" row, where it means literally a backslash and an n).

                          >     |            "     '     >-     >+     |-     |+
    -------------------------|------|-----|-----|-----|------|------|------|------  
    Trailing spaces   | Kept | Kept |     |     |     | Kept | Kept | Kept | Kept
    Single newline => | _    | n   | _   | _   | _   | _    |  _   | n   | n
    Double newline => | n   | nn | n  | n  | n  | n   |  n  | nn | nn
    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       |
    

    Examples

    Note the trailing spaces on the line before "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        
      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' withnparagraph gap, n and         spaces.n", 
      "very "long"n'string' withnnparagraph gap, n and        nspaces.n", 
      "very "long" 'string' withnparagraph gap, n and spaces.", 
      "very "long" 'string' withnparagraph gap, n and spaces.", 
      "very "long" 'string' withnparagraph gap, n and spaces.", 
      "very "long" 'string' withnparagraph gap, n and         spaces."
    ]
    

    Block styles with indentation indicators

    Just in case the above isn't enough for you, you can add a "block indentation indicator" (after your block chomping indicator, if you have one):

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

    Addendum

    If you insert extra spaces at the start of not-the-first lines in Folded style, they will be kept, with a bonus newline. This doesn't happen with flow styles:

    - >
        my long
          string
    - my long
        string
    

    → ["my longn stringn", "my long string"]

    I can't even.

    * 2 block styles, each with 2 possible block chomping indicators (or none), and with 9 possible indentation indicators (or none), 1 plain style and 2 quoted styles: 2 x (2 + 1) x (9 + 1) + 1 + 2 = 63

    Some of this information has also been summarised here.


    To preserve newlines use | , for example:

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

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

    链接地址: http://www.djcxy.com/p/45316.html

    上一篇: 哪种MIME类型用于特定于我的程序的二进制文件?

    下一篇: 在YAML中,我如何分割多行的字符串?