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下一篇: 在YAML中,我如何分割多行的字符串?
