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/20138.html

    上一篇: 如何在markdown中添加代码注释,不会呈现为html?

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