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中,我如何分割多行的字符串?