在 YAML 中,有 不同的方法来编写多行字符串。
TL;DR
- 大多数情况下使用
>
:内部换行符会被删除,尽管你可以在末尾得到一个:
key: >
Your long
string here.
- 如果你想保留那些换行符(例如,嵌入的带有段落的 markdown),使用
|
:
key: |
### Heading
* Bullet
* Points
-
如果你不想在末尾添加换行符,使用
>-
或|-
。 -
如果你需要在单词中间拆分行或希望将换行符作为
\n
字面量输入,使用""
:
key: "Antidisestab\
lishmentarianism.\n\nGet on it."
Block scalar styles (>, |)
这些允许字符如 \
和 "
无需转义,并在字符串末尾添加一个新行 (\n
)。
- Folded style 去除字符串内的单个换行符(但在末尾添加一个),并将双换行符转换为单个换行符:
Key: >
this is my very very very
long string
→ this is my very very very long string\n
额外的前导空格会被保留并导致额外的换行符。请参见下面的注释。
- Literal style 将字符串内的每个换行符转换为字面换行符,并在末尾添加一个:
Key: |
this is my very very very
long string
→ this is my very very very\nlong string\n
Block styles with block chomping indicator (>-, |-, >+, |+)
你可以通过添加一个 block chomping indicator 字符来控制字符串中最终换行符的处理,以及任何尾随空白行 (\n\n
):
>
,|
: “clip”: 保留换行符,删除尾随空白行。>-
,|-
: “strip”: 删除换行符,删除尾随空白行。- `>+', ‘|+’: “keep”: 保留换行符,保留尾随空白行。
“Flow” scalar styles (, ", ')
这些具有有限的转义,并构造一个不包含换行符的单行字符串。它们可以与键在同一行开始,或者首先带有额外的换行符,这些换行符会被删除。加倍的换行符字符会变成一个换行符。
- plain style(无转义,无
#
或:
组合,第一个字符不能是"
,'
或许多其他标点符号):
Key: this is my very very very long string
建议:避免使用。可能看起来很方便,但你可能会因为意外使用禁止的标点符号而触发语法错误。
- double-quoted style(
\"
和\'' 必须由
` 转义,换行符可以用字面\n
序列插入,行可以在尾随\
时拼接在一起):
Key: "this is my very very \"very\" loooo\
ng string.\n\nLove, YAML."
→ "this is my very very \"very\" loooong string.\n\nLove, YAML."
建议:在非常特定的情况下使用。这是唯一一种可以在不添加空格的情况下跨行拆分非常长的令牌(如 URL)的方法。并且可能在行中添加换行符是有用的。
- single-quoted style(字面
'
必须加倍,没有特殊字符,可能用于表示以双引号开头的字符串):
Key: 'this is my very very "very"
long string, isn't it.'
→ "this is my very very \"very\" long string, isn't it."
建议:避免使用。几乎没有好处,主要是不便。
Block styles with indentation indicators
如果上述内容还不够,你可以在块折叠指示符后添加一个“块缩进指示符”(如果你有的话):
- >8
My long string
starts over here
- |+1
This one
starts here
注意:Folded style 中的前导空格 (>)
如果你在 Folded style 的非首行开头插入额外空格,它们将被保留,并且会有一个额外的换行符。这不会发生在流样式中。第 6.5 节说:
折叠不适用于包含前导空白的文本行周围的换行符。请注意,更缩进的行可能仅由这样的前导空白组成。
-
>
my long
string
many spaces above
-
my long
string
many spaces above
→ ["my long\n string\n\nmany spaces above\n","my long string\nmany spaces above"]